原码、反码、补码
因为人类有十个手指头可以用来辅助计算,因此,人类的计数方式都采用十进制。
内容:
- 原码
- 反码
- 补码
1. 原码
我们都知道计算机的内部计数是建立在二进制之上,那么为了能够表示正负数,用数码序列中的最高位作为符号位,0
代表整数,1
代表负数。
以 8 位的序列为例:
最高位 | 其余位 | 十进制 |
---|---|---|
0 | 0000001 | 1 |
1 | 0000001 | -1 |
2. 反码
原码的表达方式简洁直观,但是会带来一个问题,那就是当正数和负数相加时,比如 10000001 + 00000001 = 10000010
,也就是说,造成了-1 + 1 = -2
的错误结果。这时候引入反码:
定义:如果该树是正数,其反码等于原码;如果该数是负数,其反码等于其原码的各位(符号位除外)取反。
比如,-1
原码为 10000001
,对应的反码为 11111110
。
那么,11111110 + 00000001 = 11111111
,得到 -1 + 1 = -0
的结果。
这么做,解决了-1 + 1 = 0
的问题,但是又出现了一个问题,那就是 11111111 != 00000000
即 -0 != 0
的问题。于是,引入了补码。
3. 补码
定义:正数的补码不变等于其原码;而负数的补码等于其反码加 1
。
比如, -1
原码为 10000001
,对应的反码为 11111110
,则其补码为 11111111
。
如此一来,11111111 + 00000001 = 00000000
得到了 -1 + 1 = 0
的结果。