有符號數的二進制數右移

把一個二進制數右移N位,規則爲:
除符號位外,全部右移N位,
如果數字是一個無符號數值,則用0填補最左邊的N位,
如果數字是一個有符號數值,則用1填補最左邊的N位,
也就是說如果數字原先是一個正數,則右移之後在最左邊補N個0;如果數字原先是個負數,則右移之後在最左邊填補N個1。

例子:
0000 0010 >> 1 = 0000 0001 
0000 1010 >> 2 = 0000 0010
1000 0010 >> 1 = 1100 0001  
1000 1010 >> 3 = 1111 0001

上面的例子,正數的容易理解,爲什麼負數的是填補N個1呢,解釋如下:
負數在計算機內部是以補碼形式存放的,
1000 0010是一個負數,它的原碼是1111 1110,也就是說它不是表示-2,而是表示-126;
證明1000 0010右移1位後是1100 0001呢,
1000 0010的原碼是1111 1110,對原碼右移1位,爲1011 1111,(也就是-63),再換成補碼,爲1100 0001,
可以看出,1000 0010右移1位確實是1100 0001,也就是說,

換句話說,原碼(正數)移位時,缺失位補0;

                  補碼(負數)移位時,缺失位補符號位,當然正數時亦可(正數補碼與原碼完全一樣)。

如果數字原先是個負數,則右移之後在最左邊填補N個1。
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章