計算機對數(shù)的操作,以二進(jìn)制為基,因為電子原件只能表達(dá)0/1,開或關(guān)這兩種狀態(tài),如果學(xué)過模電和數(shù)電,對此的理解會更深。
比如說十進(jìn)制9,在計算機里不可能單獨記個9,而是記錄成0000 1001,第一位符號位,0表示正數(shù)。但是-9,在計算機里記得就不是1000 1001(原碼),而是1111 0111(補碼)。
1、 為什么不用原碼記錄負(fù)數(shù)?
計算機只有加法,沒有減法,如果用原碼記錄負(fù)數(shù),則9 + (-9) = 0000 1001 + 1000 1001 = 1001 0010,得到的結(jié)果肯定不對
2、 為什么不用反碼記錄負(fù)數(shù)?
如果用反碼記錄負(fù)數(shù),則9 + (-9) = 0000 1001 + 1111 0110 = 1111 1111,再反碼,結(jié)果等于1000 0000,這個結(jié)果其實是對的,相當(dāng)于等于-0,和0000 0000是一樣的,它表示+0.(因為二者+1都等于0000 0001),但這樣就浪費了一個編碼,明明0只需要1個數(shù)表示就行,可以把1000 0000表示為-128,豈不妙哉。
3、 采用補碼為什么就能解決這個問題?
如果用補碼記錄負(fù)數(shù),則9 + (-9) = 0000 1001 + 1111 0110 = 1111 1111,再+1,等于0000 0000,剛好為0
總結(jié):計算機中只有加法,沒有減法,需要用補碼來表示負(fù)數(shù),減法的表示方法變成了:加一個負(fù)數(shù)。
此外,沒有乘法和除法,那么怎么表示乘除呢?
移位,左移乘2,右移除2
比如3 * 5 = (0000 0010 + 0000 0001) * 0000 0101,第一項是25,等于0000 0101往左移一位=0000 1010,第二項是15=0000 0101,二者加起來=0000 1111=15
除法類似。