有符号整数的四种表现形式:原码、反码、补码、移码

时间:2025-03-04 11:36:48

原码

原码是无符号整数的自然二进制编码的基础上,通过在其最左边增加一位符号位。0表示正整数,1表述负整数。
例: 8位二进制数表示有符号整数X,
X = +7 ,原码 ----00000111;
X = -7 ,原码 ----10000111;
N位原码可以表示2n-1个整数。

反码

反码也是在无符号整数的自然二进制编码基础上形成的,当表示正整数时,反码和原码的编码规则一-致,但当表示负整数时,反码除了符号位与原码一致外,其余各位的编码均与原码相反。如果用8位二进制数来表示-一个有符号整数X的反码,那么最左边的一位(即最高位)对应为符号位,剩下的7位对应为数值位,举例如下:

若X=+7,那么其反码对应为—0000111;
若X=-7,那么其反码对应为—11111000;
N位原码可以表示2n-1个整数

补码

补码也是在无符号整数的自然二进制编码基础上形成的,当表示正整数时,补码和原码反码的编码规则一致,但当表示负整数时,补码则是在反码的基础上进行“加1”处理。
由于“加1”操作可能会引起向最高位(符号位)的进位,因此,补码的最高位既符号位也是数值位。如果用8位二进制数来表示一个有符号整数X的补码,那么最左边的一位(即最高位)
对应为符号位,剩下的7位对应为数值位,举例如下:
若X=+7,那么其补码对应为—0000111;
若X=-7,那么其补码对应为—1111001;
若X=+127,那么其补码对应为—01111111;
若X=-127,那么其补码对应为—10000001;
N位补码可以表示2n个整数,其范围为 [-2n-1:2n-1)

在将负整数补码转换为原码时“减1后取反”与“取反后加1”是等价的,因此今后无论是将原码转换为补码,还是将补码转换回原码,都可以采用“取反后加1”的方式来实现。例如,

若补码为00000111,那么X=7;
若补码为1111001,则取反后为10000110,“加1”后为10000111,那么X=-7。

对于特殊码字10000000,取反后为1111111,“加1”后会产生进位,由于原码中的符号位不能兼做数值位,所以在这里需要将数值位扩展为8位,这样可得其对应的原码为10000000,那么X= = - 128。

移码

移码也叫增码,是在补码的基础上将符号位取反而来的。使用移码的一个主要原因就是补码不方便直接比较大小。