原码、补码、反码的表示及计算
Last updated
Was this helpful?
Last updated
Was this helpful?
一个数在计算机中的二进制表示形式我们称之为 机器数 或者 机器码 ,机器数是带符号的,在计算机用一个数的最高位存放符号,例如我们下面要讲到的补码、反码。
因为机器数有可能带有符号位,所以我们通常使用 真值 来表示一个机器数所代表的真正值。例如, +4
、 -5
这样的数就是真值的十进制表示。
原码就是在真值的基础上,在真值前面添加一位符号位,非符号位为该数绝对值的二进制表示。一般情况下,对于 正数 的真值,符号位为 0
;对于 负数 的真值,符号位为 1
。
例如:
真值 , 。
真值 , 。
特别的,对于数字 0
来说,原码有两种表示方式:
下面给出原码表示的定义:
对于一个除了符号位之外有 n
位的二进制数,原码的表示范围为 到 。
对于 正数 来说,反码与原码一致;对于 负数 来说,反码是最高位即符号位不变,再对其余位按位取反。
例如:
对于 正数 来说,补码与原码一致;对于 负数 来说,补码是该数的反码再加上 1
。
例如:
下面给出补码表示的定义:
解释:
原码、补码、反码,该数为正数的情况下,它们三者相同。
该数为负数的情况下,符号位不改变,其余位取反,就得到了反码。将该反码加一得到的就是该数的补码。
不管正数负数,将其补码的符号位取反,其余位不变,得到的就是该数的移码。
下面是一些求补码、反码、移码的例子。
真值 (十进制表示)
真值 (二进制表示)
对应的原码
对应的反码
对应的补码
对应的移码
-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
真值 , , 。
真值 , ,。
对于一个除了符号位之外有 n
位的二进制数,反码的表示范围为 到 。
真值 , , , 。
真值 , , ,。
对于一个除了符号位之外有 n
位的二进制数,补码的表示范围为 到 。