今天简单总结了一下计算机的原码、补码、反码的表示,谨以此文缅怀教过我数字逻辑电路课程以及计算机组成原理课程的老师。
一个数在计算机中的二进制表示形式我们称之为 机器数 或者 机器码 ,机器数是带符号的,在计算机用一个数的最高位存放符号,例如我们下面要讲到的补码、反码。
因为机器数有可能带有符号位,所以我们通常使用 真值 来表示一个机器数所代表的真正值。例如, +4
、 -5
这样的数就是真值的十进制表示。
原码
原码就是在真值的基础上,在真值前面添加一位符号位,非符号位为该数绝对值的二进制表示。一般情况下,对于 正数 的真值,符号位为 0
;对于 负数 的真值,符号位为 1
。
例如:
真值 ,原
真值 ,原
特别的,对于数字 0
来说,原码有两种表示方式:
原
原
下面给出原码表示的定义:
对于一个除了符号位之外有 n
位的二进制数,原码的表示范围为 到
反码
对于 正数 来说,反码与原码一致;对于 负数 来说,反码是最高位即符号位不变,再对其余位按位取反。
例如:
真值 ,原 ,反
真值 ,原 ,反。
对于一个除了符号位之外有 n
位的二进制数,反码的表示范围为 到
补码
对于 正数 来说,补码与原码一致;对于 负数 来说,补码是该数的反码再加上 1
。
例如:
真值 ,原 ,反 ,补
真值 ,原 ,反 ,补。
下面给出补码表示的定义:
对于一个除了符号位之外有 n
位的二进制数,补码的表示范围为 到
求补码、反码、移码口诀
原补反,正三同。
负符定,余取反,
得反码,加一补。
补符反,得移码。
解释:
- 原码、补码、反码,该数为正数的情况下,它们三者相同。
- 该数为负数的情况下,符号位不改变,其余位取反,就得到了反码。将该反码加一得到的就是该数的补码。
- 不管正数负数,将其补码的符号位取反,其余位不变,得到的就是该数的移码。
下面是一些求补码、反码、移码的例子。
真值 (十进制表示) | 真值 (二进制表示) | 对应的原码 | 对应的反码 | 对应的补码 | 对应的移码 |
-1 | - 0000 0001 | 1000 0001 | 1111 1110 | 1111 1111 | 0111 1111 |
0 | 0000 0000 | 1000 0000 0000 0000 | 1111 1111 0000 0000 | 0000 0000 | 1000 0000 |
1 | + 0000 0001 | 0000 0001 | 0000 0001 | 0000 0001 | 1000 0001 |