### byte从0开始
byte0 (0000 0000),
### byte中的所有正数
byte1 (0000 0001),
byte2 (0000 0010),...
byte126 (0111 1110),
因为计算机规定 最高位为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(计算机运算是通过补码运算实现的...)
参考博客:
http://blog.csdn.net/MJ_Lee/article/details/65447270