關於負數的右移》與無符號右移》運算小結

2021-09-12 01:52:04 字數 1467 閱讀 6781

對於帶符號右移,若為負數,則在儲存時首位表示符號位,其值為1,表示該值是負數的移位,在移位過程中,高位補1,若符號位是0,表示是正數,在移位過程中高位補零,兩者的前提是符號位保持不變:

對於負數的右移:因為負數在記憶體中是以補碼形式存在的,所有首先根據負數的原碼求出負數的補碼(符號位不變,其餘位按照原碼取反加1),然後保證符號位不變,其餘位向右移動到x位,在移動的過程中,高位補1.等移位完成以後,然後保持符號位不變,其餘按位取反加1,得到移位後所對應數的原碼。即為所求。

舉例1:

-100帶符號右移4位。

-100原碼:   10000000    00000000    00000000   01100100

-100補碼:    保證符號位不變,其餘位置取反加1

11111111    11111111    11111111   10011100

右移4位   :   在高位補1

11111111    11111111    11111111    11111001

補碼形式的移位完成後,結果不是移位後的結果,要根據補碼寫出原碼才是我們所求的結果。其方法如下:

保留符號位,然後按位取反

10000000    00000000    00000000     00000110

然後加1,即為所求數的原碼:

10000000    00000000    00000000    00000111

所有結果為:-7

舉例2:

-100無符號右移4位。

-100原碼:   10000000    00000000    00000000   01100100

-100補碼:    保證符號位不變,其餘位置取反加1

11111111    11111111    11111111   10011100

無符號右移4位   :   在高位補0

00001111    11111111    11111111    11111001

即為所求:268435449

總結:正數的左移與右移,負數的無符號右移,就是相應的補碼移位所得,在高位補0即可。 負數的右移,就是補碼高位補1,然後按位取反加1即可。

首先左移和右移的區別是很好區分的

左移<< :就是該數對應二進位製碼整體左移,左邊超出的部分捨棄,右邊補零。舉個例子:253的二進位製碼1111 1101,在經過運算253<<2後得到1111 0100。很簡單

右移》 :該數對應的二進位製碼整體右移,左邊的用原有標誌位補充,右邊超出的部分捨棄。

無符號右移》 :不管正負標誌位為0還是1,將該數的二進位製碼整體右移,左邊部分總是以0填充,右邊部分捨棄。

舉例對比:

-5用二進位制表示1111 1011 ,紅色為該數標誌位

-5>>2: 1111 1011————–>1111 1110 。

11為標誌位

-5>>>2:  1111 1011————–>0011 1110 。

00為補充的0

無符號右移負數 關於負數的右移與無符號右移運算小結

對於帶符號右移,若為負數,則在儲存時首位表示符號位,其值為1,表示該值是負數的移位,在移位過程中,高位補1,若符號位是0,表示是正數,在移位過程中高位補零,兩者的前提是符號位保持不變 對於負數的右移 因為負數在記憶體中是以補碼形式存在的,所有首先根據負數的原碼求出負數的補碼 符號位不變,其餘位按照原...

關於負數的右移與無符號右移運算小結

對於帶符號右移,若為負數,則在儲存時首位表示符號位,其值為1,表示該值是負數的移位,在移位過程中,高位補1,若符號位是0,表示是正數,在移位過程中高位補零,兩者的前提是符號位保持不變 對於負數的右移 因為負數在記憶體中是以補碼形式存在的,所有首先根據負數的原碼求出負數的補碼 符號位不變,其餘位按照原...

有符號右移》,無符號右移》

計算機表示數字正負不是用 加減號來表示,而是用最高位數字來表示,0表示正,1表示負 1.有符號右移 若正數,高位補0,負數,高位補1 正數 例如4 2 首先寫出4的二進位制數,因為是正數所以最高位為0,也就是第乙個 0000 0000 0000 0000 0000 0000 0000 0100 右移...