1. 程式人生 > >計算機二進制的表示

計算機二進制的表示

都是 正向 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。比如:

解決辦法為:

計算機二進制的表示