用图形理解补码

本文尽可能用较少的数学语言去解释补码的含义。本文灵感来自关于补码的理解
,在该文的基础上进一步深入探讨。有些用语可能不是很规范,且文章有不对的地方,欢迎大家指正。

我们知道,相比于原码、反码,补码具有两个独特性质:一是没有了正负0之分,二是可以让计算机正确地进行运算。那么,为什么补码具有这两个性质呢?

正负0归一

在学习补码的时候,补码的定义是:正数和反码相同,负数是反码加一。

假设我有个二进制的三位数。
补码中正负0的表达:
+0:000
-0:111+1=000

正负0的编码合并了,而三位二进制数一共有8种不同的编码,这揭示将会有一个编码空出来,可以表达新的数字

多出来的数字

先看看3位二进制数下的原码和反码:

000001010011100101110111
+0123-0-1-2-3
000001010011100101110111
+0123-3-2-1-0

接下来看看补码:

000001010011100101110111
0123-4-3-2-1

我们可以发现,相同的位数下,原码和反码都只能表达-3~+3,而补码多出来一个-4,这个就是没有正负0之后多出来的数字,但是,-4是怎么冒出来的?为什么100对应的偏偏是-4?

再回过头看看定义:正数和反码相同,负数是反码加一。通过定义表达的意思似乎是:反码和补码有映射关系,而反码和数字有映射关系,这样就建立了数字和补码之间的映射关系。但是反码映射的数字中根本没有-4!

在网络上搜索如何通过补码求数字,答复是求补码对应的补码,就是它原码。同样,-4根本没有对应的原码,而且如果按照这个方法求解,100的补码就是它本身,就是原码中空出来的-0。

从上面分析可见,这个补码的定义可以从数值(内容)->原码/反码->补码(表示),却不能从补码(表示)->数值(内容)。要真正理解补码,还需从计算机如何存储数值角度出发。

计算机数值的逻辑结构

自衔的蛇

计算机表示数字有着位数限制,000增大逐渐变成111,而111再增大就会溢出成为000。这就像一头自衔其尾的蛇,不能用数轴表示编码的逻辑关系,应当用某种循环的结构表示编码之间的逻辑关系。

编码-角度

而旋转符合这种逻辑关系,旋转0°和旋转360°的效果是一样的。那么,我们可以用角度描述编码的这种循环关系,我们用角度对应相应的编码(如下图所示)。

在这里插入图片描述
这样的确有了自衔其尾的意思了。不过为什么000是对应0°的位置呢?这是因为一个数字有两个含义,一个是表示结果,一个是在运算中作为运算的数字。0°不仅代表着0°对应的这个位置,也代表着任何角度再旋转0°仍是它本身,而二进制中具有这个性质的只有000。

角度-数值

这样就建立了编码-角度之间的映射关系,接下来建立编码-数值的映射关系。

根据上文,所以在角度-数字映射中,它得既能在结果意义上自洽。也能在运算意义上自洽。所以0必须对应0°,此外,还要满足码的循环逻辑,向正方向旋转数字增大,逆方向旋转数字减小。
(正确运算有一个基础,就是运算结果和被运算数都得在能表示的范围之内,比如三位数补码只能拿属于[-4,3]的数字进行运算,所有运算中间结果也必须在[-4,3]之间,因为一个码只能表示一个数字。达到最大值就不能正方向旋转了,达到最小值也就不能逆方向旋转了)

理论上满足这两点的码制,都能满足运算结果正确。任意一个包含0、连续的八个整数都可以和编码建立对应关系且符合运算正确。

但是这还没有解决为什么100是-4,更深入地说,为什么最大是3而最小是-4。这个和计算机如何处理数-码的转换有关,如果令首位为1为负数,首位为0为正数,就得到了补码。
在这里插入图片描述
总结:计算机表示数字有两个独立的关键点:

  • 数字和二进制编码的对应关系
  • 二进制编码运算和数字运算逻辑的相恰

在学习补码的时候一直不能通过定义理解补码的含义,事实上从定义理解我认为也是不对的。从原码到反码到补码能很好地建立数字和二进制编码之间的对应关系,但是却不能解决运算逻辑的问题,而我认为补码恰恰就是针对这个提出的,所以理应把后者作为切入点。

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值