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

原码

原码是无符号整数的自然二进制编码的基础上,通过在其最左边增加一位符号位。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。

移码

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

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值