机器数:一个数在计算机中的二进制表示形式, 叫做这个数的机器数。
真 值:将带符号位的机器数对应的真正数值称为机器数的真值。
在计算机的存储中,机器数是带符号的,通常用最高位表示符号位,1表示负数,0表示正数.
例如:机器字长8位. 十进制的数5 表示成二进制为00000101. -5则表示成10000101. 10000101 不表示133
原码:+|x| 或者 -|x| (就是符号位0/1 加上真值的绝对值)
例如:
+1 的原码:0000 0001
-1 的原码:1000 0001
8位二进制表示的范围是:[1111 1111, 0111 1111] 即 [-127, +127].
反码:正数的反码=原码,负数的反码=符号位不变+其余每一位按位取反。
例如:
+1 的原码:0000 0001 +1 的反码:0000 0001
-1 的原码:1000 0001 -1 的反码:1111 1110
8位二进制表示的范围是 [1111 1111, 0111 1111] 即 [-127, +127].
补码:正数的补码=原码,负数的补码=反码+1
例如:
+1 的原码:0000 0001 +1 的反码:0000 0001 +1 的补码:0000 0001
-1 的原码:1000 0001 -1 的反码:1111 1110 -1 的补码:1111 1111
8位二进制表示的范围是 [0111 1111, 1000 000] 即 [-128, +127].
移码:不管正负,只要将其补码的符号位取反即可。
例如:
+1 的原码:0000 0001 +1 的反码:0000 0001 +1 的补码:0000 0001 +1 的移码:1000 0001
-1 的原码:1000 0001 -1 的反码:1111 1110 -1 的补码:1111 1111 -1 的移码:0111 1111
总结:
计算机中负数存储的方式是补码,由于正数的补码是它本身,所以可认为计算机内存储的是补码.
正数 | 负数 | |
原码 | 0 + |x| | 1 + |x| |
反码 | 0 + |x| | 符号位不变,其余每一位按位取反 |
补码 | 0 + |x| | 反码+1 |
移码 | 1 + |x| | 补码的符号位取反 |