打印

上班的时候,想到一个补码的问题

[复制链接]
614|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
qbwww|  楼主 | 2022-1-4 21:16 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 qbwww 于 2022-1-11 15:50 编辑

     #申请原创#            
     上班的时候,想到一个补码的问题。如果是一个8比特位的正数和负数相加的话。用补码来进行相加。那么符号位,究竟是怎样变化的?符不符合咱们常用的加减法规则。

  想到这里咱们来验证一下。

  首先随便想两个数,这个数要在2的7次方之内。我要的是一个8比特位的数,第一位表示正负,其余的七位用来代表数字。所以数值大小要在127之内。那就33和27吧。说不定还能好算一些。

  给27加上负号。先算一下33的原码。计算结果如图。



  再算一下-27的原码。



  那么33和-27的原码相加的话等于多少?



  结果显而易见。是-60。这个结果明显是错误的。

  我们把-27的原码转为补码来试一下。



  如图所示。这样的话,我们的二进制加法计算结果就正确了。符号位这样的话也变成了0。

  这样就可以理解为什么计算机中的编码都是用补码来进行存储的了。

  进一步的再想,如果两个都是负数呢?那么符号位还会不会进行变化呢?那就用-33和-27来进行计算。因为-27的补码之前已经算过了,现在我们直接算-33的补码。然后把-33和-27的补码进行相加。



  结果如图。-68?-33加上-27明显是-60。所以到底是哪里错了呢?

  补码加补码得到的还是补码。我们把补码转成原码之后呢。结果是什么?



  这次对了。正数的补码与原码相同。负数的补码与原码是不一样的,需要进行转化。


对于学数电的人来说,补码的学习异常重要。因为计算机中所有的数据都是用补码来进行存储和运算的。

好,今天的内容就到这里,感谢大家的阅读。





使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

733

主题

4517

帖子

14

粉丝