学习小结--关于补码的一点心得体会

63 阅读3分钟
前言

大学学计算机组成的时候,其实并没有对补码有过多的理解。只是会计算就行,像什么“负数的补码”,“正数的补码就是本身”。但是对其中的原理并不了解,下面就记录一下最近重新复习补码得到的心得体会

补数的概念

我们学过补角,比如在180°的角度范围内,20°和160°互为补角,这里的补角就是说两个角度互补,两个角度之和为180°。那么补数呢,其实大同小异。我们以一个时钟作为例子,我们知道时钟有12个刻度,以顺时针方向为正。假如现在是3点,那么时针回拨2个小时是几点呢?如果时针前进10个小时又是几点呢?其实我们可以发现都是1点。刚刚说了我们以顺时针方向为正,那么回拨2个小时可以记为-2,前进10个小时可以记为+10,这时我们可以说-2和+10就是一对互补数。为什么3-2和3+10都等于1呢,这时我们就可以引出度(或者说为模)。

模的概念

上面的时针其实就是一个模为12的转盘,只能装1-12个数,超过12之后就会被重新来一个循环,就是像1、2、3...、12;1、2、3.....。那么我们就说12就是这个时钟的模,就是这个规则所能约束的集合容量。

计算机中的补码

以4个比特位的数据长度举例。我们知道4位二进制数能够表示0-15的十进制数。

二进制十进制二进制十进制
0000000011
0010200113
0100401015
0110601117
1000810019
101010101111
110012110113
111014111115

如上表所示,我们将其画成一个转盘。

图片1.png\

这时我们就可以将其类比为时钟,这也是一个模系统,只不过模的值为16,其可表示的值为0-15。我们为了表示负数,人为定义首位为正负值,为0时代表为正数,为1代表为负数。所以这个图也可表示-8-+7的范围,这样就构成了能代表正负数的补码编码。

补码和真值的转换

正数的补码:本身 负数的补码:模-负数的绝对值,也可以将负数绝对值取反然后加1,也可以反码除符号位其余取反加1 补码的真值:首位表示符号位,其余位代表数值位,直接按权展开即可

总结

补码的一些知识点以及理解如上所述,不知道是否阐述清楚,其实我们不必将补码想的那么高深,本质上就是补数,当我们理解了补数,补码自然而然就会了。要理解容量的概念,计算机的字长是有限度的,超出之后只能被舍弃,因此就会形成一个循环的数轴,就导致了模的出现。首先理解无符号数的补码,再去思考有符号的数怎们办,本质上这种区别只是认为规定,计算机是不知道的,他还是按照无符号数一样去计算,这时理解有符号数补码的重要点。