百度詞條:
計算機中的有符號數有三種表示方法,即原碼、反碼和補碼。三種表示方法均有符號位和數值位兩部分,符號位都是用0表示“正”,用1表示“負”,而數值位,三種表示方法各不相同 [1] 。在計算機系統中,數值一律用補碼來表示和存儲。原因在於,使用補碼,可以將符號位和數值域統一處理;同時,加法和減法也可以統一處理 [2] 。
原碼:
符號位0表示正數,符號位1表示負數
正數原碼 = 0 + 正數絕對值
負數原碼 = 1 + 負數絕對值
反碼:
正數的反碼不變,負數原碼符號位的1不變,絕對值部分按位取反
補碼:
正數的補碼等於原碼,負數的補碼等於負數的反碼加1
例如:
+20的原碼:00010100
+20的反碼:00010100
-20的原碼:10010100
-20的反碼:11101011
補碼:
正數補碼 = 正數反碼 = 正數原碼
負數補碼 = 負數反碼符號位的1不變,絕對值部分+1
例如:
+20原碼:00010100
+20反碼:00010100
+20補碼:00010100
-20原碼:10010100
-20反碼:11101011
-20補碼:11101100
計算機在執行有負數參與的計算時,就必須用補碼。原因是計算機內部只有加法器,沒有減法器,換言之,計算機只能進行加法運算,不能進行減法運算,所以,在計算減法運算時,需要通過轉換成加上“減數相反數”的形式進行運算,因此計算機中引入了補碼運算。
具體計算:
取一個數字的補碼表示數:
1.
if (num > 0)
x = num;
else
x = pow(2, 32) + num;
2.
另一個計算法為:
unsigned int x=num;
直接一句轉化。
學習博客在這里。
【Over】