我没看过原文,单纯从数电基础跟你说说,计算机硬件只有加法器,没有减法器,所以所有减法都是换算成加法运算的,而补码就是为了将减法换算成加法而诞生的。
首先是补码的原理:现在是9点,而一个表现在的指针指在11点,我们想调整的话,可以做减法运算,11-2,逆时针调两个格。而如果这个表只能单向调整的话,我们可以顺时针调10个格,同样能指向9点,这个10就是2的补码(这里是12进制,反码的对应关系是0-11,1-10,2-9,3-8)。
搁到2进制这里,由于首位是符号位,是用来表示正负数的,所以这位是不参与补码转换的,总不能让1111与0001相等对吧?那么为什么1111就能与1001对等呢?(这里第一位的1是符号位)
举个例子这里先单纯做一下不带符号位的数值运算:0110 - 0101 = 0001;0110 + 1011 = 10001。
前边加上符号位就变成了:00110 + 10101 = 00001(这里是人类的视角,先把符号位的转化为负号,再运算00110 - 00101,再判断正负);而计算机的视角是这样的:首先10101已经转换成补码11011了,然后计算是,00110 + 11011 = 100001,这里标红的高位1没地方存储,那就不要了,所以,就变成了00001,即+0001。
我们再算个负数比正数大的:人类视角:00101 + 10110 = 10001 。计算机视角:00101 + 11010 = 11111,注意了,结果由于也是以补码的形式存储的,所以结果的原码也就是10001。