Java 原碼反碼補碼

1、學習原碼反碼補碼的目的是爲了後面學習強制類型轉換;

2、有符號數據表示法的幾種方式:

原碼:就是二進制定點表示法,即最高位爲符號位,"0"表示正,"1"表示負,其餘位表示數值的大小。

例如:通過一個字節,也就是8個二進制位表示+7和-7:

+7:0(符號位)0000111
-7:1(符號位)0000111

反碼:正數的反碼與其原碼相同;負數的反碼是對其原碼逐位取反,但符號位除外。

補碼:正數的補碼與其原碼相同;負數的補碼是在其反碼的末位加1。

注意:我們計算是通過補碼的形式計算的。

注意:負數通過補碼求原碼:減一取反。

3、例子:我們求 ±7 的反碼和補碼:

正數的原碼反碼補碼都相同:+7 的原反補都爲:00000111

-7的原碼:10000111

-7的反碼:11111000(在原碼的基礎上取反,符號位不變)

-7的反碼:11111001(在補碼的基礎上末位+1)

4、驗證 ±7 補碼相加是否爲0:

+7(補碼) 0 0000111
-7(補碼) 1 1111001
----------------------
         10 0000000

最後的計算結果爲10 0000000,我們用一個字節來表示第八位爲最高位,1超出第八位被忽略,所以00000000爲0;

5、練習:

練習1:已知原碼求補碼:0b10110100

分析:0b爲二進制前綴,1爲符號位爲負,負數要先求反碼再求補碼;

反碼:0b11001011

補碼:0b11001100

練習2:已知補碼求原碼:0b11101110

分析:0b爲二進制前綴,1爲符號位爲負;

注意:負數已知補碼求原碼:減1取反。

補碼:0b11101110

反碼:0b11101101(在補碼的基礎上減一)

原碼:0b10010010(反碼取反)

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