×
模拟电子 > 详情

二进制的原码和反码与补码的详细资料讲解

发布时间:2021-04-13 发布时间:
|

真值与机器值

真值很好理解,就是十进制的数字前面再加上正负号,这是人类可以简单识别的数字,比如0、±16、±1084、±10.34、±100.453等,而正数前面的+符号可以省略。机器值从字面理解就是机器(计算机)识别的值,实际上也确实是这个意思。

计算机中通过高低电平表示1或者0,这样就可以表示一个二进制的数值。一个1或者0表示的数值位称为一个bit,而计算机中存储和传输数据的最小单位是一个字节(byte)也就是8个bit,所以说计算机所有计算本质上都是基于二进制。

由于很多时候一个数据需要使用2个或者2个以上的字节表示,那么这种数据无论是存储还是传输的时候都会有一个顺序的问题,也就是大小端对齐(字节序)问题。在存储时高位字节在前为大端对齐,反之为小端对齐。在数据传输时先传输高位字节为大端字节序,反之为小端字节序。目前绝大多数平台内部都是小端对齐的方式存储数据,而大多数通信协议却都是用大端字节序传输数据,所以这一点值得注意一下。

符号位与数值位

计算机中使用二进制存储传输和计算数值,但是不能只有数值,计算的时候还得有正负之分。在计算机中使用最高bit位的数值来表示正负号,这个bit位称作符号位。

计算机中符号位的值为0表示这个数为正数,符号位值为1表示这个树为负数。由于符号位表示符号所以其不表示具体的值,除开符号位剩余的bit位用来表示数值也就是数值位。比如1个字节的整数00000001,其中最高bit(最左边)位的0为符号位,表示这个数为正数,数值位为1,所以其真值为1。同理2个字节的整数00000000_0000001,其真值也是1。

原码、反码和补码

注:int8为8bit位整数占用1byte,int16为16bit位整数占用2byte。

被乘数的第1个bit位值为0,将被乘数乘以0然后左移1位得到:00000000;

被乘数的第4个bit位值为0,将被乘数乘以0然后左移4位得到;00000000;

被乘数的第5个bit位值为0,将被乘数乘以0然后左移5位得到;00000000;

被乘数的第6个bit位值为0,将被乘数乘以0然后左移6位得到;00000000;

被乘数的第7个bit位值为0,将被乘数乘以0然后左移7位得到;00000000;

至于除法则是使用交替加减法的方式,本文只是对计算原理做一下扩展,这里不再继续深入做介绍,如果有想了解的可以自行上网查询。

通过上面的分析可以知道,使用补码可以将所有计算都转化为加法计算,这样可以让计算机底层对于整数计算变得简单,反码属于历史遗留,因为其存在±0的问题。


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
CMOS型高速A/D转换器ADS8320的性能特点和应用设计分析