# (1)概念
計算機的所有數據在底層都是以二進制的[補碼]形式存儲
實際人們看到的數字是[原碼]轉化來的
而[原碼]是通過[補碼]得到的
補碼 -> 原碼 -> 最后人們看到的數
***進制轉換的時候需要先把內存存儲的補碼拿出來變成原碼在進行轉換輸出***
正數高位補0 負數高位補1(前面空白位全是1)
數字1 00000000 1 正數高位都補0
數字-1 111111111 1 負數高位都補1
原碼: 用來轉換對應進制
反碼: 二進制碼0變1,1變0叫做反碼,反碼用於原碼補碼之間的轉換.(符號位不變)
補碼: 用來做數據的存儲運算. 補碼提出的根源是讓計算機底層的實現減法操作(可以表達出一個數的正負)
言外之意:計算機默認只會做加法,例:5+(-3) => 5 - 3
乘法除法:是通過左移和右移 << >> 來實現
# (2)運算
(原碼 反碼 補碼之間的轉換 , 符號位不要動)
正數: 原碼 = 反碼 = 補碼
負數: 原碼 = 補碼取反加1 給補碼求原碼
負數: 補碼 = 原碼取反加1 給原碼求補碼
例:計算-9+5的結果,先分別算處二進制
-9
000000001001 (原碼)==>負數的原碼前面都是0補位
1111111110110 (反碼)==>原碼全部取反
1111111110111 (補碼)==>反碼+1,如果都是1就進一位
5
0000000000101 (正數==>原碼 = 反碼 = 補碼)
1111111110111 -9的補碼
000000000101 5的補碼
1111111111100 (補碼)====>兩者補碼相加得到新的補碼
補碼==>取反 + 1 ==> 原碼
000000000011 (取反)
000000000100 (加1==> 原碼)得到 -4
只保留符號位第一位,剩下中間的位用0填充即可