該作者講述的很詳細(xì)。
對(duì)于帶符號(hào)右移,若為負(fù)數(shù),則在存儲(chǔ)時(shí)首位表示符號(hào)位,其值為1,表示該值是負(fù)數(shù)的移位,在移位過(guò)程中,高位補(bǔ)1,若符號(hào)位是0,表示是正數(shù),在移位過(guò)程中高位補(bǔ)零,兩者的前提是符號(hào)位保持不變:
????????對(duì)于負(fù)數(shù)的右移:因?yàn)樨?fù)數(shù)在內(nèi)存中是以補(bǔ)碼形式存在的,所有首先根據(jù)負(fù)數(shù)的原碼求出負(fù)數(shù)的補(bǔ)碼(符號(hào)位不變,其余位按照原碼取反加1),然后保證符號(hào)位不變,其余位向右移動(dòng)到X位,在移動(dòng)的過(guò)程中,高位補(bǔ)1.等移位完成以后,然后保持符號(hào)位不變,其余按位取反加1,得到移位后所對(duì)應(yīng)數(shù)的原碼。即為所求。
?????? 舉例1:
?????????????????? -100帶符號(hào)右移4位。-100二進(jìn)制轉(zhuǎn)換為:1100100
?????????????????? -100原碼:?? 10000000??? 00000000??? 00000000?? 01100100
?????????????????? -100補(bǔ)碼:??? 保證符號(hào)位不變,其余位置取反加1
???????????????????????????????????????? 11111111??? 11111111??? 11111111? ? ? ?10011100
?????????????????? 右移4位?? :?? 在高位補(bǔ)1
???????????????????????????????????????? 11111111??? 11111111??? 11111111? ? ? 11111001
???????????????????????????????? 補(bǔ)碼形式的移位完成后,結(jié)果不是移位后的結(jié)果,要根據(jù)補(bǔ)碼寫(xiě)出原碼才是我們所求的結(jié)果。其方法如下:
??????????????????? 保留符號(hào)位,然后按位取反
???????????????????????????????????????? 10000000??? 00000000??? 00000000???? 00000110
??????????????????? 然后加1,即為所求數(shù)的原碼:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 10000000??? 00000000??? 00000000??? 00000111
???????????????????????? 所有結(jié)果為:-7
????????????????? 舉例2:
????????????????????????????-100無(wú)符號(hào)右移4位。
?????????????????? -100原碼:?? 10000000??? 00000000??? 00000000?? 01100100
?????????????????? -100補(bǔ)碼:??? 保證符號(hào)位不變,其余位置取反加1
???????????????????????????????????????? 11111111??? 11111111??? 11111111?? 10011100
?????????????????? 無(wú)符號(hào)右移4位?? :?? 在高位補(bǔ)0
???????????????????????????????????????? 00001111??? 11111111??? 11111111??? 11111001
????????????????? 即為所求:268435449
總結(jié):
負(fù)數(shù)的無(wú)符號(hào)右移就是相應(yīng)的補(bǔ)碼移位所得,在高位補(bǔ)0即可。
負(fù)數(shù)的右移,就是補(bǔ)碼高位補(bǔ)1,然后按位取反加1即可。
---------------------
作者:等你看完風(fēng)景
來(lái)源:CSDN
原文:https://blog.csdn.net/king_msky/article/details/17221973