在計算機中,我們使用補碼來描述負數與正數,但許多人都不明白為什么這樣做,大家都只知道正數的補碼是它的本身,負數的補碼是取反加1,但是為什么我們需要補碼這個東西?許多人可能都不太明白,其實參考補碼的目的是為了解決計算機運算中減法問題,由于計算機不是人,所以無法區分加法與減法,所以我們需要引入一種運算規則同時滿足加法與減法運算規則,補碼由此誕生,
對于計算機而言加法易于實作,所以計算機中有加法器,那么如何利用加法器完成減法運算就是一個需要解決的問題,
在計算程序中我們常常強調要避免結果資料溢位(即計算結果超過資料的表示范圍),然而我們就是通過資料溢位來實作減法運算,
大家可能會發現一個有意思的現象一個位元組的表示范圍是-128~127;恰好為2^8個數字,這不是巧合,正是如此設計才實作了減法運算通過加法來實作,
首先舉一個簡單的例子:
1111 1101 // -3 (一位元組)
+ 0000 0111 // 7
--------------------
1 0000 0100 // 等價于 0000 0100 // 4
//前面的1溢位,所以結果為4
看到這兒有的小伙伴可能已經明白了,通過溢位用加法來實作減法運算,但是我們怎么表示負數,所以接下來的問題就是用什么來表示負數可以實作這種方法,
看到這兒小伙伴們可能已經猜出來,我們可以通過距離溢位還需要加多少個數值來表示這個負數,
因為差的數值需要另一個加數來補上,
例如一些例子:
-12(差12就可以溢位) ——————> 1111 0100(-12補碼)
-1 (差1 就可以溢位) ——————> 1111 1111 (-1 補碼)
1111 1101 // -3 需要數值3才可以溢位
+ 0000 0111 // 7 提供數值3
--------------------
1 0000 0100 // 4 結果
綜上,補碼可以通過加法運算來實作減法運算,
覺得博主寫的通俗易懂的可以點贊關注!!!你們的支持就是我創作的動力呀!!!加油!!
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/400604.html
標籤:其他
