为什么计算机二进制中,一个数减另一个数等价于正数加取补码的负数
为什么计算机二进制补码运算结果正确
·
补码:
正数的补码是本身
负数补码是按位取反后加一
通过补码做加法,能实现减法的效果。
原因
其实这是一种“模的范围内等价,我们可以直接做等价转换的运算来推导:
例子:
5: 0101
3: 0011
-3:1101
5 - 3 = 5 + (-3)
0101 - 0011 = 0010
0101 + 1101 = 0010 【其实这里溢出了,计算结果本应为 10010】
证明正确性:
一个二进制数与反码相加后为全1 : 0011 + 1100 = 1111
可得 0011 + 1100 + 1 = 100000
因此 -0011 = 1101 - 100000
所以
5 - 3
= 5 + (-3)
= 0101 + (-0011)
= 0101 + 1101 - 100000 【 * 】
= 10010 - 10000
= 0010
我们注意看标 * 的那一步,其实就是补码运算再加个减法。
因此,不考虑最高位的溢出,模意义下的计算结果是相同的。或者说,我们默认做了一个减法,因为结果显而易见,所以不明写了。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐

所有评论(0)