算机只会加法,不会减法,乘法,除法等等等等。首先,在生活中,自然数是没有限制的,从1到无数,你想说多少就说多少。但是在计算机里,数字不能是无限大,因为保存数字需要空间,就好比在一张纸上,可以写出的数字也是有限的一样。然而这既是缺点,也是优点,这个缺点在计算机的世界里被发扬光大,成了优点。
钟表就是现实生活中的一个例子。24点过后,又是1点。没有25点。25点就是第二天的1点。25点就是 24 + 1点。因为钟表只能容纳24个数,当数到25的时候,24会向前进位,只留下1。如图:24点挂钟
如果不是很好理解的话,可以想象,我的表只有0点到9点,这样的话,5 + 8 = 13,但是“10”被进位,只留下了3。这样,我们就说,前面的“10”因“溢出”而丢失。如图:
从图中可以看 5点加8小时是3点。 5点减去2小时,也是3点
所以,想要计算5 - 2,只要计算 5 + 8就可以了。
5 - 2 = 3; 5 + 8 = 13 (个位相等)
6 - 5 = 1; 6 + 5 = 11 (个位相等)
9 - 3 = 6; 9 + 7 = 16 (个位相等)
通过上面的几个等式发现,减一个数,就是加这个数的补数,然后高位被溢出,剩下的就是结果了。至于高位是哪一位,就要看你的计算的容量了。
补数是一个数合起来等于10/100/1000/... 的那个数。
10的补数是0,
5的补数是5,95,995,……
31的补数是79,969,……
等等。
那计算几又是如何计算补数的呢?2进制是计算机的本性,没有1234567890,而只有 1 和 0,逢2进1。
按照刚才10进制的规则,相加等于2/4/8/16/32/64/……的数,就是补数。为了方便计算,我们假定计算机只有4位,就是最大只能表示15(1111B)。也就是用16来计算数字的补数。这样一来,
数 | 9 (1001) | 5(0101) | 13(1101) |
求补数 | 16 - 9 = 12 | 16 - 5 = 11 | 16 - 13 = 3 |
补数 | 12(0111) | 11(1011) | 3(0011) |
数取反 | 0110 | 1010 | 0010 |
于是,你可以总结一个规律,2进制的补数,就是每一位取反,最后加1就可以了。
比如
13 → 1101 → 取反→ 0010 → +1 → 0011→ 3
3 → 0011 → 取反 → 1100 → +1 → 1101 → 13
计算 8 - 3 这个运算的时候,就是 8 + (8的补数),这样:
1000 - 0011 = 1000 + (1100 + 1) = 10101。
只有4位,前面的1被溢出,只剩下 0101( 5)