补码
小伙伴们对补码的计算应该是相当熟悉,但大家有没有思考过一个问题,补码是在什么情况下创造出来的呢?
为回答这一问题,我们先来看一个生活中的例子:
大家都见过时钟吧,时钟转一轮是12小时,从2点转到6点,顺时针转动的话需要4个小时,但假如我让时钟倒着转8个小时是不是也能转到6点。
那么有意思的来了
在时钟这12个数中 2 + 4 = 6, 2 - 8 = 6
那么我们就可以将减法转换成加法
聪明的朋友应该已经明白了,补码的作用就是将减法转化成加法
清楚补码的作用后,我们接着分析, -8 是如何变成 +4 的呢
在时钟中,一共有12个数,从1走到12再接着走会怎么样?没错,会变成1
为了方便大家用计算机的方式理解
我们把时钟改成从0 到 11
0 ;1……11;0;1
0 模 12 = 0; 1 模 12 = 1; …… ;12 模 12 = 0;13 模 12 = 1;
走到最大之后又回到了原处!
是不是有循环队列内味了,没错,就是模
补码就是的计算就是通过 模 - X 得到的
这样我们就可以得到 4 = 12 - 8
在计算机的世界中,负数补码是通过原码先求反码再+1得到的
例如我们用三位表示
一共能表示出8个数
000 001 010 011 100 101 110 111
八个数,那么模就是 8 也就是二进制的 1000
假如我们将 -010 转化为加法
我们用1000 - 010 = 0110
我们知道反码 + 原码 就是当前位的最大值
010 的反码是 101
010 + 101 = 111(三位中表示的最大值)
现在我们再来观察原码取反+1这个式子
反码是 最大值 - 原码
我们调换一下顺序
最大值 + 1 - 原码
即 模 - 原码
是不是回到了最初的那个式子
我们继续把上述算完, 111 - 010 + 1 = 110
到此,小伙伴们是否已经明白了呢?