关于反码,byte最大值127,最小值-128的由来缘由以及书本上从未讲解过的反码补码功能作用

### byte从0开始

byte0  (0000 0000),


### byte中的所有正数

byte1  (0000 0001),

byte2  (0000 0010),
byte3  (0000 0011),

...

byte126  (0111 1110),

byte127  (0111 1111),//byte最大值


因为计算机规定 最高位为1时表示负号" - " 

所以 byte127 (0111 1111)  + byte1  (0000 0001) = byte-128  (1000 0000)


细心的朋友也许已经发现, byte-128  (1000 0000)继续往下累加,

byte-127  (1000 0001)

byte-126  (1000 0010),

...

byte-3  (1111 1101),

byte-2  (1111 1110),

byte-1  (1111 1111),

继续加1变为(0000 0000)即 byte0

此时恰好可以构成一个时钟如图。

由图可知存在着一些对称关系,这些关系可以帮助我们迅速找出一个数的相反数的二进制是多少。

例子:

求byte -2的二进制表示。

解: 求得byte2 == 》  0000 0010

                    求反== 》  1111 1101

    加 1 == 》  1111 1110  >> 即是byte-2

备注:此种求解方式即为补码(先求反,再加1),一个数的二进制的补码即为该数的相反数的二进制。

在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理  补码的出现是为了能让计算机学会减法运算


2017-12.5补充:

反码,补码的存在的意义(的反码补码功能作用)

问:请计算出 -1 + 1

补码计算规则:

正数:原码 = 补码 = 反码

负数:反码 = 符号不变,其它位取反

           补码 = 反码 + 1
十进制的 1 原码  :  0000 0000 0000 0001

十进制的 -1 原码  : 1000 0000 0000 0001

十进制的 -1 反码  :  1111  1111  1111  1110

十进制的 -1 补码  :  1111  1111  1111  1111

计算-1+1即得(即-1补码+1的补码)

1111 1111 1111 1111 + 0000 0000 0000 0001 = 0000 0000 0000 0000

结果即为0


2017-12-7补充

请计算1-1。

如果用原码计算减法:

1-1=1+(-1)=[0000 0001]原 +[1000 0001]原 =[1000 0010]原 =-2。

所以不能用原码计算。


如果用反码计算减法:

1-1 =1+(-1) = [0000 0001]原+ [1000 0001]原= [0000 0001]反+ [1111 1110反]= [1111 1111]反= [1000 0000]原 =-0。

出现0 = -0 ,0带符号没有意义,会有[0000 0000]原和[1000 0000]原 两个编码表示0。

所以不能用反码计算。


于是补码的出现,解决了0的符号以及两个编码的问题:

1-1=1+(-1)= [0000 0001]原+ [1000 0001]原= [0000 0001]补+ [1111 1111]补= [0000 0000]补= [0000 0000]原。


为什么9取反结果为-10(计算机运算是通过补码运算实现的...)

关于反码,byte最大值127,最小值-128的由来缘由以及书本上从未讲解过的反码补码功能作用_第1张图片

参考博客:

http://blog.csdn.net/MJ_Lee/article/details/65447270




你可能感兴趣的:(关于反码,byte最大值127,最小值-128的由来缘由以及书本上从未讲解过的反码补码功能作用)