無符號和有符號數的二進制數右移(有待繼續整理)

把一個二進制數右移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,也就是說,


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


====================================================================

二進制數10000111如何轉換成無符號數135,和有符號數-121?


有符號數和無符號數的區別在於第一位表示正負數,還是數值.換句話說,有符號的二進制數最高位是符號位,剩下的是數值部分的補碼(正數的補碼是其本身,負數的補碼是該數值取反加一).


10000111說明這個數是負數,0000111的補碼是1111001.
故1×2^6+1×2^5+1×2^4+1×2^3+0×2^2+0×2^1+1×2^0 = 121
所以有符號數是-121

對於無符號數可以直接轉換不需要考慮正負.
10000111 = 1×2^7 + 0×2^6 +0×2^5 +0×2^4 +0×2^3 +1 ×2^2 +1×2^1 +1×2^0 =135
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章