计算机对数的操作,以二进制为基,因为电子原件只能表达0/1,开或关这两种状态,如果学过模电和数电,对此的理解会更深。
比如说十进制9,在计算机里不可能单独记个9,而是记录成0000 1001,第一位符号位,0表示正数。但是-9,在计算机里记得就不是1000 1001(原码),而是1111 0111(补码)。
1、 为什么不用原码记录负数?
计算机只有加法,没有减法,如果用原码记录负数,则9 + (-9) = 0000 1001 + 1000 1001 = 1001 0010,得到的结果肯定不对
2、 为什么不用反码记录负数?
如果用反码记录负数,则9 + (-9) = 0000 1001 + 1111 0110 = 1111 1111,再反码,结果等于1000 0000,这个结果其实是对的,相当于等于-0,和0000 0000是一样的,它表示+0.(因为二者+1都等于0000 0001),但这样就浪费了一个编码,明明0只需要1个数表示就行,可以把1000 0000表示为-128,岂不妙哉。
3、 采用补码为什么就能解决这个问题?
如果用补码记录负数,则9 + (-9) = 0000 1001 + 1111 0110 = 1111 1111,再+1,等于0000 0000,刚好为0
总结:计算机中只有加法,没有减法,需要用补码来表示负数,减法的表示方法变成了:加一个负数。
此外,没有乘法和除法,那么怎么表示乘除呢?
移位,左移乘2,右移除2
比如3 * 5 = (0000 0010 + 0000 0001) * 0000 0101,第一项是25,等于0000 0101往左移一位=0000 1010,第二项是15=0000 0101,二者加起来=0000 1111=15
除法类似。