原碼、反碼和補碼的運算

原碼

最高位爲符號位,0代表正數,1代表負數,非符號位爲該數字絕對值的二進制表示。
例如:
127的原碼爲0111 1111
-127的原碼爲1111 1111

反碼

正數的反碼與原碼一致;負數的反碼是對原碼按位取反,只是最高位(符號位)不變。
例如:
127的反碼爲0111 1111
-127的反碼爲1000 0000

補碼

正數的補碼與原碼一致;負數的補碼是該數的反碼加1。
例如:
127的補碼爲0111 1111
-127的補碼爲1000 0001

總結:

(1)正數的原碼、反碼、補碼是一致的;
(2)負數的反碼是對原碼按位取反,只是最高位(符號位)不變;補碼是反碼加1;
(3)計算機數字運算均是基於補碼的。

記錄java中的 ~ 是按位取反。
例如數字2在計算機中存儲爲 0000 0010
在進行完取反操作以後變爲1111 1101,但這是數字的反碼形式,我們需要將其轉化爲數字的原碼形式才能知道它代表的是多少。首先將其轉化爲反碼(減去1)得1111 1100,然後將其轉化爲原碼(除了符號爲以外,按位取反)得1000 0011,所以數字2在進行按位取反操作以後即變爲了-3.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章