对原码,反码,补码的一点理解。

这块儿一直迷迷糊糊的,有时做题或应用还会用到,计算机体系结构又没学好,哎。。,简单记录一下,帮助理解记忆吧。

对有符号整型而言,计算机运算采用补码形式,且不考虑符号位,以1byte=8bit为例简单说明。

原码也就是这里的有符号二进制码。

对正数,反码、补码与其原码一样。

对负数,反码是符号位以外的其余各位取反,补码是反码+1,简记为‘取反加1’。

按此规则,原码,反码,补码表示范围如下:

-127, ......, -1 , 0 , 1 , ......, 127

原码:11111111,......,10000001,00000000,00000001,......,01111111

反码:10000000,......,11111110,00000000,00000001,......,01111111

补码:10000001,......,11111111,00000000,00000001,......,01111111

那么问题来了,127+127+1=255, 2^8=256,因为最高为作为符号位了,还有一个数没表示出来,现在的表示范围是-127~127。怎么办呢?

很简单,因为10000000没用上,把它作为原码的话就是-0,没什么意义,跟别提反码了,所以把10000000作为-128的补码,反正运算都是以补码的形式,这样正好表示-128~127共256个数,10000001(-127)减1正好是10000000(-128),这样就完美了。

当然书上有更深入更准确的讲解,具体再行查阅吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

禺垣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值