关于原码、反码、补码取值范围的问题

关于原码、反码、补码取值范围的问题

原码

整数X的原码其数符位0表示正,1表示负;其数值部分就是X绝对值的二进制表示

例如:

​ [+1]原码=00000001;[-1]原码=10000001

[+127]原码=01111111; [-127]原码=11111111

关于八位二进制,由于第一位是符号位,所以从负到正为11111111~01111111

故原码范围为-127到127,关于为什么01111111表示127,我们知道八位,2^7=10000000,表示的是128,注意几次方就有几个0

因此对于01111111,加一个就变成了10000000(128),故01111111表示127;

因此原码的取值范围为-127~127

原码中有正0与负0,[+0]原码=0000000;[-0]原码=10000000

反码

整数x的反码对于正数,与原码相同;对于负数,数符位为1,数值位为X的绝对值取反

例如:

[+1]反码=00000001;[-1]反码=11111110

[+127]反码=01111111;[-127]反码=10000000

反码中0也有正0和负0,[+0]反码=00000000;[-0]反码=11111111

因此反码的取值范围也是-127~127

补码

整数X的补码对于正数与反码、原码相同;对于负数,数符位为1,其数值位X的绝对值取反最右加1,也就是反码加一

例如:

[+1]补码=00000001;[-1]补码=11111111

[+127]补码=01111111;[-127]补码=10000001

注意的是,0的补码唯一

即[+0]补码=[-0]补码=00000000

我此刻可以发现,对比原码和反码,我们发现补码中少了一个0的编码,就是10000000(在原码和反码中表示-0)这个编码,

因此在补码中,将这个多出来10000000进行扩充,用它来表示-128

因此补码的取值范围位-128~127

  • 18
    点赞
  • 81
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值