本帖最后由 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。所以到底是哪里错了呢?
补码加补码得到的还是补码。我们把补码转成原码之后呢。结果是什么?
这次对了。正数的补码与原码相同。负数的补码与原码是不一样的,需要进行转化。
对于学数电的人来说,补码的学习异常重要。因为计算机中所有的数据都是用补码来进行存储和运算的。
好,今天的内容就到这里,感谢大家的阅读。
|