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

2021-08-27 14:18:06 字數 1114 閱讀 5055

計算機表示數字正負不是用+ -加減號來表示,而是用最高位數字來表示,0表示正,1表示負

1.有符號右移》(若正數,高位補0,負數,高位補1)

正數:例如4>>2

首先寫出4的二進位制數,因為是正數所以最高位為0,也就是第乙個

0000 0000 0000 0000 0000 0000 0000 0100

右移兩位得到(高位補0)

000000 0000 0000 0000 0000 0000 0000 01

結果為:1,右移n位也就是4/(2^n)

負數:例如-4>>2(高位補1)

首先寫出-4的二進位制數,因為是負數所以最高位為1

1000 0000 0000 0000 0000 0000 0000 0100

然後寫出-4補碼:保證符號位不變,其餘位置取反加1(從右往左遇到第乙個1,然後剩下的全部取反就是了)

1111 1111 1111 1111 1111 1111 1111 1100(補碼)

右移2位: 在高位補1

1111 1111 1111 1111 1111 1111 1111 1111

根據補碼寫出原碼才是我們所求的結果, 保留符號位,然後按位取反再加上1

100000 0000 0000 0000 0000 0000 0000 00(取反後的結果)

100000 0000 0000 0000 0000 0000 0000 01(再加1)

結果為:-1

2:無符號右移》(不論正負,高位均補0)

正數:例如4>>>2

與4>>2的運算相同,結果也為1

負數:例如-4>>>2

首先寫出-4的二進位制數,因為是負數所以最高位為1

1000 0000 0000 0000 0000 0000 0000 0100

然後寫出-4補碼:保證符號位不變,其餘位置取反加1(從右往左遇到第乙個1,然後剩下的全部取反就是了)

1111 1111 1111 1111 1111 1111 1111 1100(補碼)

右移2位: 在高位補0

0011 1111 1111 1111 1111 1111 1111 1111

結果為:1073741823

左移《最簡單:丟棄最高位,0補最低位

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

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

移位(左移,右移和無符號右移)

package sort public class shift int cc a m int dd a m int ee a m int qq x m 1 int pp x m int yy x m 1 system.out.println c c system.out.println cc cc ...

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

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