計算機二進制的表示
阿新 • • 發佈:2018-03-05
都是 正向 OS 範圍 width 沒有 右移 無符號 padding
無符號數:
對於無符號數,二進制表示容易理解,它的表示範圍:
比如一個 4位的無符號數字,它表示的範圍從0——2^4-1,即 從0——15,共16個數字;
二進制表示 | 十進制表示 |
0000 | 0 |
0001 | 1 |
… | … |
1111 | 15 |
當無符號數進行右移時,都是進行邏輯右移,即左邊空位為0補齊,比如1101右移兩位變為0011;
有符號數
對於有符號數,用補碼表示,其實是把負數用補碼表示。。什麽是補碼呢??比如說吧,對於一個鐘表來說,它能表示的範圍為12,我們反向轉2個格時,也可以用正向轉10個格表示。所以啊,-2 對應的補碼就是10; 對於4位的表示的二進數,它能表示為從-8到7共16個數字,如下所示:
二進制 | 十進制 | 二進制 | 十進制 |
0000 | 0 | 1000 | -8 |
0001 | 1 | 1001 | -7 |
0010 | 2 | 1010 | -6 |
0011 | 3 | 1011 | -5 |
0100 | 4 | 1100 | -4 |
0101 | 5 | 1101 | -3 |
0110 | 6 | 1110 | -2 |
0111 | 7 | 1111 | -1 |
對有符號數進行右移時,基本都是進行算術右移,即補符號位。 對於正數來說,它的符號符號位為0,所以算術右移時,左邊空出位補 0; 對於 負數來說,它的符號位為1,所以算術右移時,左邊空出位補1。
用算術右移代替除數
對於正整數來說,在計算機中的當除不盡時,會直接拋棄小數位,只保留整數位。所以呢,對於正數來說,整數除法的結果總是小於或等於實際結果。 對於負數來說,整數除法的結果總是大於或等於實際結果。比如: 3 /2 = 1 , -3 /2 = -1;
當我們作算術右移來代替除法時,對於正整數來說,結果沒有問題,比如:
對於負整數來說,結果會經常比應該得到的結果大1。比如:
解決辦法為:
計算機二進制的表示