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(反碼取反)