书写时表示的数和机器中编码表示的数分别称为真值(无符号数)与机器数(有符号数)。常用的机器数表示有原码、反码、补码三种形式。
以下解释基于八位二进制。
一、原码
1. 原码表示法在数值前面增加了一位符号位(即最高位为符号位);正数该位为0,负数该位为(0有两种表示:+0和-0),其余位表示数值的大小。原码的取值范围为-127~127。
如:+110(书写二进制为+1101110B) 其原码为:01101110B
-110(书写二进制为-1101110B) 其原码为:11101110B
二、反码
1. 最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。反码的取值范围是-127~127。
2. 原码转换到反码:①正数的反码与原码相同 ②负数的反码为它的绝对值按位取反,符号位不变。
如:【-110】,原码为11101110B,反码为:10010001B
三、补码
1. 最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。补码的取值范围位-128~127。
2. 原码转换到补码:①正数的原码与补码相同 ②负数的补码为将其原码除符号位外的所有位取反(0变1,1变0,符号位为1不变)后加1
如:【-110】,原码为11101110B,补码为:10010010B
四、其它
一些特殊点数的原码,反码,补码
+0 | -0 | +1 | -1 | 127 | -127 | -128 | |
原码 | 0000 0000 | 1000 0000 | 0000 0001 | 1000 0001 | 0111 1111 | 1111 1111 | 无 |
反码 | 0000 0000 | 1111 1111 | 0000 0001 | 1111 1110 | 0111 1111 | 1000 0000 | 无 |
补码 | 0000 0000 | 0000 0000 | 0000 0001 | 1111 1111 | 0111 1111 | 1000 0001 | 1000 0000 |