二進位制的負數學得有些懵逼,求指點按照網上的做法,負數十進位制轉二進位制就是先按照正數的轉得到原碼,然後反碼加一
這是因為計算機在儲存負數時,使用的是它的二進位制補碼
在我們輸入的-1的時候,計算機會將這個-1儲存為負數的補碼也就是 原始碼: 1000 0001反碼:1111 1110補碼:1111 1111特別說明:反碼就是符號位不變,其他位取反
所以,補碼就是把數1234在一個字長內,補足為1’0000的數的編碼方式
有的人會問用原碼多好還能直接看出來其實並不然,計算機有時候還並不是那麼智慧的CPU只會加法並不會減法所以才是補碼儲存也就是說CPU只有加法器並沒有減法器我們來看看正數的補碼 和 負數的補碼 相加是不是得到了正確的結果呢
我這裡用8bit=1B的整數來列表,以便於觀察:有符號8bit和十進位制原數的對應關係符號位為0時,去掉符號位,剩下的7bit就表示原數,這個很簡單
正數的補碼等於本身,負數的補碼等於反碼+1:例如:X = 0b11 (3),四位元表示原碼 = 0011(3),對應反碼為 = 0011(3) ,補碼為 = 0011(3)
其實呢,是因為計算機在計算過程中並不是用我們認識的二進位制來表達運算的
注意這裡獲取補碼的方式,其過程是:- 00000010B →取絕對值 00000010B →全部位取反 11111101B → +1B 得11111110B歸納:取絕對值 → 取反 → +1這裡我們給“負數補碼”一個定義(非權威定義,僅用於
printf(“%d\n”,cc)