补码详解

先举个例子,当前时间为晚上9点,我将其加上十个小时后是几点?(不能用减法运算)

解法:我们不能使用10-(24-21),因为不允许使用加法.此处我们先用9对12进行取模,得到的结果为-3.再用10+(-3),最终结果为7.

 

计算机中也只有加法器,所以我们要将负数变为补码,再进行运算.最终结果再转为源码.而我们的补码也正是取模运算的结果!

补码计算方法:

  • 求得原码的反码
  • 反码末位加1

为什么求反码?

求负数反码的过程其实就几乎相当于取模的过程.用负数最小值1111.....减去原码即为反码.(比如用-12对-9取模结果为-3,-12-(-9)=-3)

 

为什么要加1?

假设一个byte数为a,a的模为128,是byte数能表示的最大值127再加1.

因为模的定义是一个整的循环,例如时钟一圈就是12.而byte最大值二进制01111111还要加上1才能表示一个完整的循环.

 

 

所以对于负数与加法的运算

-33+4

先写出-33的原码,符号位不变,其他位取反,得到反码,再末位加1,得到补码.

与4的补码相加(正数补码为本身)

结果再转为原码输出

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值