为什么负数的补码是原码按位取反加一?

您所在的位置:网站首页 1110101的原码 为什么负数的补码是原码按位取反加一?

为什么负数的补码是原码按位取反加一?

2023-06-25 07:49| 来源: 网络整理| 查看: 265

2020年8月11日 周二 天气晴 【不悲叹过去,不荒废现在,不惧怕未来】

本文目录 反码和补码存在的意义为什么负数的补码是原码按位取反加一?解释 参考文献

*2021年2月22日 周一 天气晴 【不悲叹过去,不荒废现在,不惧怕未来】

看了《深入理解计算机系统》这本神书后才发现,原来补码、反码和源码都是有定义的!(以前竟然都不知道,我到底学了些啥- -)如下图所示,根据补码、反码和源码的定义,很容易就能理解为什么负数的补码是原码按位取反加一,以及为什么补码计算减法就像计算加法一样,原因就是补码的第一位权重为 -2^(w-1)。

反码和补码存在的意义

反码:解决负数加法运算问题,将减法运算转换为加法运算,从而简化运算规则; 补码:解决负数加法运算正负零问题,弥补了反码的不足。

总之,反码与补码都是为了解决负数运算问题,跟正数没关系,因此,不管是正整数还是正小数,原码,反码,补码均相同。

为什么负数的补码是原码按位取反加一?

但是,为什么负数的补码就是原码按位取反再加一呢,这个问题就像有人问你 1 + 1 为什么等于2,我们都知道1 + 1 = 2,但是却难以解释为什么。同样的,我们也不好解释为什么负数的补码是原码按位取反加一?虽然不好解释,但还是能够解释的。

解释

举个栗子,我们都知道:1 + (-1) = 0,换成二进制表示就是:0000 0001 + x(-1的二进制编码) = 0000 0000,那么x = 0000 0000 - 0000 0001 = 1111 1111,就是 -1 的原码 1000 0001 取反再加一,然后把 1111 1111 起个名字叫做补码(你也可以起别的名字,但是现在大家都叫它补码)。

在这里,我们把 x = 0000 0000 - 0000 0001 中的 0000 0000 看作是 1111 1111 + 0000 0001,即:x = (1111 1111 + 0000 0001) - 0000 0001,根据加法交换律,x = (1111 1111 - 0000 0001) + 0000 0001,然后你会发现,括号里面的 1111 1111 - 0000 0001 得到的就是 -1 的原码 1000 0001 取反的结果,然后再加上1(0000 0001)就得到了 -1 的编码 1111 1111。

因为 0000 0000 始终可以写为 (1111 1111 + 0000 0001),因此在8位的二进制数里,负数(正数的相反数)的补码 = (1111 1111 - 正数的编码)) + 0000 0001,(1111 1111 - 正数的编码)的结果就等于负数的反码,因此可以得出:负数的补码 = 负数的反码 + 0000 0001,即:负数的补码是原码按位取反加一。

参考文献

《深入理解计算机系统》 /wenxinwukui234/article/details/42119265 https://zhidao.baidu.com/question/23927269.html https://www.cnblogs.com/starry-skys/p/11997091.html



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3