Abstract
- 原码:直接使用符号位表示正负数,简单直观,但有两个零(+0和-0)。
- 反码:解决了两个零的问题,但运算复杂性较高。
- 补码:是计算机中普遍使用的表示方式,解决了正负数计算的一致性问题,并且仅有一个零(0)。
1. 原码(Sign-Magnitude)
原码直接使用一个位表示符号,剩下的位表示数值大小。最高位(MSB)为符号位:
- 0表示正数
- 1表示负数
示例
- +5的8位原码表示:0000 0101
- -5的8位原码表示:1000 0101
2. 反码(One’s Complement)
反码通过对原码的每一位取反来表示负数:
- 正数的反码与原码相同
- 负数的反码是将原码的符号位保持不变,其余各位取反
示例
- +5的8位原码表示:0000 0101,反码相同:0000 0101
- -5的8位原码表示:1000 0101,反码:1111 1010
3. 补码(Two’s Complement)
补码是计算机中表示有符号整数的标准方法。它通过对反码加1来获得:
- 正数的补码与原码相同
- 负数的补码是将其反码加1
示例
- +5的8位原码表示:0000 0101,补码相同:0000 0101
- -5的8位原码表示:1000 0101,反码:1111 1010,补码:1111 1011(反码+1)
计算示例
让我们详细计算一个具体的数值,比如-5在8位二进制下的原码、反码和补码。
计算步骤
-
原码:
- +5的原码:0000 0101
- -5的原码:1000 0101
-
反码:
- +5的反码:0000 0101
- -5的反码:将1000 0101的符号位保持不变,其余各位取反:1111 1010
-
补码:
- +5的补码:0000 0101
- -5的补码:在反码1111 1010基础上加1:1111 1011
表示和范围
在8位系统中,补码的表示范围为:
- 正数:0000 0000(0)到0111 1111(127)
- 负数:1000 0000(-128)到1111 1111(-1)