计算机原码、反码、补码、移码转换及范围
数据的表示:
| 数值1 | 数值-1 | 1-1 |
原码 | 0000 0001 | 1000 0001 | 1000 0010 |
反码 | 0000 0001 | 1111 1110 | 1111 1111 |
补码 | 0000 0001 | 1111 1111 | 0000 0000 |
移码 | 1000 0001 | 0111 1111 | 1000 0000 |
原码:把一个数转成二进制形式,二进制不足8位即在左边补零。最左边的位又叫做符号位,正数为0,负数为1 。如图,在原码中 1+(-1)=-2,可见原码不能直接相加减。于是引入反码类计算。
反码:反码正数值和原码相同,不用转换。负数值除符号位(最左边)外,其余取反( 0—>1,1—>0)。根据图中把1+(-1)反码相加减可以看等于0是正确的。
补码:补码正数值也和原码相同,不用转换。负数值在反码基础上在最低位加 1 即可。
移码:在补码基础上,把补码符号位取反 即可,其余不做改变。
数值表示范围:
| 整数 |
原码 | -(2n-1-1)~2n-1-1 |
反码 | -(2n-1-1)~2n-1-1 |
补码 | - 2n-1 ~ 2n-1-1(大一个范围) |
为什么补码大一位呢?
答:因为原码和反码有两种0 :
正0{原码:0000 0000 ,反码:0000 0000}
负0{原码:1000 0000 ,反码:1111 1111}
而补码0只有唯一的表示(0000 0000),而(1000 0000)被人为定义为最小负数,即-128。所以补码能表示的真值比原码多 一个。