计算机以补码的方式保存数据
符号位是最前面的一位:1表示负数,0表示正数
如果是正数:原、反、补码相同
如果是负数:
- 反码等于原码取反(除符号位外全部取反)
- 补码等于反码加1
例:
127的原反补码都为:0111 1111
–127的原反补码:
原码:1111 1111
反码:1000 0000
补码:1000 0001
重点:那么-128怎么表示呢?
在八位二进制下,因为有一位是符号位,原码只能表示0到127,-1到-127,-128不能用原码表示。
按这种说法,128因为无法用八位二进制下的原码表示,则-128的八位二进制下的补码也是不存在的。
但是,为了在数的表示上消除编码映射的不唯一性,所以通过人为的定义对转换的10000000强制认定为-128。
因此,-128八位二进制下的原码和反码不存在,而八位二进制下的补码为10000000。
-1的补码是 1111 1111
-2的补码是 1111 1110
-127的补码是1000 0001
-128 = -127 - 1
-128的补码是1000 0001 - 1 --> 1000 0000
为什么byte的取值范围是-2 ^ 7到2 ^ 7 -1,因为1(2 ^ 0) + 2 + 4 + 8 + …+64=127,是按等比数列的公式算出来的