原码和补码
(1)原码
用最高位作为符号位来表示数的符号:为 0 表示正数;为 1 表示负数,其余各位表示数值本身的绝对值(以二进制表示)。
例如:
- +10 的原码是:
0000 0000 0000 1010(最高位 0 代表正) - -10 的原码是:
1000 0000 0000 1010(最高位 1 代表负) - +0 的原码是:
0000 0000 0000 0000 - -0 的原码是:
1000 0000 0000 0000
注意: +0 和 -0 表示的是同一个数 0,而在内存中却有两个不同的表示。由于 0 的表示不唯一,不适合计算机的运算,所以在计算机内部一般不使用原码来表示数。
(2)反码
- 正数: 正数的反码与原码相同。如 +10 的反码也是
0000 0000 0000 1010。 - 负数: 负数的反码是:原码符号位仍为 1,其他各位取反。如 -10 的反码为
1111 1111 1111 0101。
关于 0 的表示:
- +0 的反码是:
0000 0000 0000 0000 - -0 的反码是:
1111 1111 1111 1111
同样,0 的表示不唯一。所以,在计算机内部一般也不使用反码来表示数。
(3)补码
- 正数: 正数的补码与原码相同。如 +10 的补码同样是
0000 0000 0000 1010。 - 负数: 负数的补码是:除最高位仍为 1 外,原码的其余各位求反,最后再加 1。或者说,负数的补码是其反码加 1。
例如,-10 的补码计算过程:
- 原码:
1000 0000 0000 1010 - 求反(除最高位外):
1111 1111 1111 0101 - 再加 1,结果为:
1111 1111 1111 0110
关于 0 的表示(补码的唯一性):
-
+0 的补码是:
0000 0000 0000 0000 -
-0 的补码计算:
Plaintext
1111 1111 1111 1111 (反码)
+ 1
---------------------
1 0000 0000 0000 0000 (1 溢出)剩下:
0000 0000 0000 0000
结论: 用补码形式表示数值 0 时,是唯一的,都是
0000 0000 0000 0000。
总结
计算机通常都是以补码形式存放数值。因为采用补码形式不仅数值表示唯一,而且能将符号位与其他位统一处理。实际上采用补码,在计算机中也可以使减法变为加法,为硬件实现减法提供方便。