计算机技术论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

  • 欢迎访问 计算机技术论坛-电脑迷与初学者的家园!由于论坛管理严格,新注册会员可能遇到各种问题,无法解决的请发邮件 admin@jsjbbs.cn
查看: 1381|回复: 0

二进制真值与机器值详解

[复制链接]
发表于 2021-4-7 14:07:03 | 显示全部楼层 |阅读模式
#111723#
真值与呆板值
真值很好懂得,就是十进制的数字后面再加上正负号,这是人类能够简略辨认的数字,比方 0、±16、±1084、±10.34、±100.453 等,而正数后面的+标记能够省略。呆板值从字面懂得就是呆板(盘算机)辨认的值,现实上也确切是这个意思。
盘算机中通太高低电平表现1或许0,如许便可以表现一个二进制的数值。一个1或许0表现的数值位称为一个bit,而盘算机中存储和传输数据的最小单元是一个字节(byte)也就是8个bit,以是说盘算机全部盘算实质上都是基于二进制。
在盘算机中,咱们能够应用1个或许多个字节存储一个数,但不管是几多个字节,其巨细确定是牢固的,同时其所能表现的数值的范畴也是牢固的。比方说对应用1个字节存储的数停止盘算或许传输,那末这个数所能表现的最小值为00000000最大值为11111111,转换为十进制为0 ~ 255。那末不管对这个数做了甚么盘算,不管盘算以后的成果为几多都不能超越这个范畴,同理应用2个字节存储的数范畴为0 ~ 65535。
因为良多时间一个数据须要应用2个或许2个以上的字节表现,那末这类数据不管是存储仍是传输的时间都市有一个次序的成绩,也就是巨细端对齐(字节序)成绩。在存储时高位字节在前为大端对齐,反之为小端对齐。在数据传输时先传输高位字节为大端字节序,反之为小端字节序。现在绝大少数平台外部都是小端对齐的方法存储数据,而大少数通讯协定却都是用大端字节序传输数据,以是这一点值得留神一下。
标记位与数值位
盘算机中应用二进制存储传输和盘算数值,然而不能只无数值,盘算的时间还得有正负之分。在盘算机中应用最高bit位的数值来表现正负号,这个bit位称作标记位。
盘算机中标记位的值为0表现这个数为正数,标记位值为1表现这个树为正数。因为标记位表现标记以是其不表现详细的值,除开标记位残余的bit位用来表现数值也就是数值位。比方1个字节的整数00000001,此中最高bit(最左侧)位的0为标记位,表现这个数为正数,数值位为1,以是其真值为1。同理2个字节的整数00000000_0000001,其真值也是1。
原码、反码和补码
盘算机只辨认呆板码,实在也就是二进制数,而且应用最高bit位表现标记位。那末两个真值为8和-8的8位整数,它们在盘算机外部的呆板值能否就分辨是00001000和10001000?实在并不是,这只是8和-8的原码,而呆板合计中的呆板值是应用补码存储和盘算的。
盘算机中,正数的原码、反码和补码是一样的,以是下面谁人例子中,真值为8的8位整数的呆板值确切是00001000,然而-8就不是这么回事了。正数的起首将原码数值位按位取反失掉反码,而后再将反码数值位加1以后则失掉补码。咱们来看一下-8这个例子,其原码为10001000,数值位按位取反以后的反码为11110111,而后数值位加1以后的补码为11111000。以是真值为-8的8位整数在盘算机中的呆板值为11111000,咱们来看上面这张表:

注:int8为8bit位整数占用1byte,int16为16bit位整数占用2byte。
刚说的是原码转补码的步调,实在补码转原码的步调是一样的。起首正数的原码补码是一样的不须要转换,咱们看正数11111000,起首将数值位按位取反失掉10000111,而后再将数值位加1失掉10001000。咱们再来看一个8位的整数10000000,是不是发明这个数原码和补码是一样的,那末这个看起来像是“-0”的数是怎样回事呢?实在能够将这个数当作是一个特别值,它的实在含意就是最小值。8位的这类“-0”的真值为⑿8,16位的这类“-0”真值为-32768。以是只要要记着100...000这类补码就是最小值就行,咱们看上面的这张表:

有两对8bit位的整数4、8和4、-8,咱们分辨看一下他们在盘算机中是怎样做加法盘算的。起首看4和8的补码分辨为00000100和00001000,只要要将每个bit位相加就行,成果为00001100,其真值为12。咱们再来4和-8的盘算,它们补码分辨为00000100和11111000,而后将它们按位相加(留神标记位也要做加法)失掉11111100,其原码为10000100,真值为-4。
再来看一下减法盘算,比方8bit位的整数-8减去4,起首能够将4处置一下能够变成(-8) + (-4),如许是不是就又变成了加法了?-8和-4的补码分辨为11111000和11111100,将它们按位相加失掉补码11110100(留神这是8位的整数,超越部份产生了溢出),转换成原码为10001100,真值为⑿。
再来看一下乘法,比方8bit位的整数-8乘以13,他们的补码分辨为11111000和00001101。此中-8为被乘数,13为乘数,而且乘数有8个bit位,须要将被乘数按位与和位盘算8次而后将成果相加,看以下剖析:
被乘数的第0个bit位值为1,将被乘数乘以1而后左移0位失掉:11111000;
被乘数的第1个bit位值为0,将被乘数乘以0而后左移1位失掉:00000000;
被乘数的第2个bit位值为1,将被乘数乘以1而后左移2位失掉;11100000;
被乘数的第3个bit位值为1,将被乘数乘以1而后左移3位失掉;11000000;
被乘数的第4个bit位值为0,将被乘数乘以0而后左移4位失掉;00000000;
被乘数的第5个bit位值为0,将被乘数乘以0而后左移5位失掉;00000000;
被乘数的第6个bit位值为0,将被乘数乘以0而后左移6位失掉;00000000;
被乘数的第7个bit位值为0,将被乘数乘以0而后左移7位失掉;00000000;
由此能够得盘算失掉8组补码(留神下面做位移触及到的整数溢出,只能是8个bit位),而后将它们做加法失掉10011000(也存在整数溢出)转换为原码为11101000,真值为⑽4。
至于除法令是应用瓜代加减法的方法,本文只是对盘算道理做一下扩大,这里不再持续深刻做先容,假如有想懂得的能够自行上彀查问。
通过下面的剖析能够晓得,应用补码能够将全部盘算都转化为加法盘算,如许能够让盘算机底层对于整数盘算变得简略,反码属于汗青遗留,由于其存在±0的成绩。

原文题目:二进制原码/反码/补码详解,不懂的请看过去
文章出处:【微信大众号:嵌入式ARM】欢送增加存眷!文章转载请注明出处。

更多内容阅读推荐:液晶电视烧了怎么修理
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

无图版|手机版|计算机技术论坛 JSJBBS.CN @ 2008-2024 ( 鲁ICP备17021708号 )

技术支持 : 北京康盛新创科技有限责任公司

快速回复 返回顶部 返回列表