原码、补码、反码、移码
原码、补码、反码、移码

原码
原码表示简单明了,符号位用“0”表示正数,符号位“1”表示负数,并易于和真值转换。但用原码进行加减运算时,却带来了许多麻烦。
| 真值x | [x]原 |
|---|---|
| 0.1101 | 0.1101 |
| -0.1101 | 1.1101 |
| -0.0011 | 1.0011 |
| -1100 | 1,1100 |
| +0.0000 | 0.0000 |
| -0.0000 | 1.0000 |
可见 [+0]原 不等于 [-0]原
补码
如果能找到一个与负数等价的正数来替代负数,就可以把减法操作用加法替代。而机器数采用补码时,就能满足此要求。
补数
-
一个负数可用它的正补数来替代,而这个正补数可以用模加上负数本身求得。
-
一个正数和一个负数互为补数,它们绝对值之和即为模数。
-
正数的补数即正数本身
反码
反码通常用来作为由原码求补码,或者由补码求原码的中间过渡。
三种机器数的联系:
- 三种机器数的最高位均为符号位。
- 当真值为正时,三种机器数的表示方式均相同,即符号位用“0”表示,数值部分与真值相同。
- 当真值为负时,三种机器数的表示方式不同,但其符号位都用“1”表示,而数值部分有这样的关系:
- 原码“求反加1”得补码,原码“每位取反”得反码
移码
当真值用补码表示时,由于符号位和数值部分一起编码,与习惯上的表示法不同,因此人们很难从补码的形式上直接判断其真值的大小。
如果对每个真值加上2^n(n为整数的位数),代码本身就可以看出真值的实际大小。
移码为补码基础上,符号位取反。
| 十进制数 x | [x]补 | [x]移 |
|---|---|---|
| 21 | 0,10101 | 110101 |
| -21 | 1,01011 | 001011 |
| 31 | 0,11111 | 111111 |
| -31 | 1,00001 | 000001 |

浙公网安备 33010602011771号