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

2021-07-10 23:03:07 字數 1748 閱讀 5266

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);

system.out.println("e =" + e);

system.out.println("ee =" + ee);

system.out.println("d =" + d);

system.out.println("dd =" + dd);

system.out.println("q =" + q);

system.out.println("qq =" + qq);

system.out.println("p =" + p);

system.out.println("pp = " + pp);

system.out.println("y =" + y);

system.out.println("yy =" + yy);

}}

結果:c =1

cc =1

e =1

ee =1

d =1600

dd =1600

q =-2

qq =-2

p =-1600

pp = -1600

y =134217727

yy =-2

結論:a為正數:

c為a右移b位的結果,cc為a除以2的b次方的結果因為c == cc,所以a右移兩位相當於a除以2的b次方;

e為a無符號右移b位的結果,ee為a除以2的b次方的結果因為 e == ee,所以a無符號右移兩位相當於a除以2的b次方;

d為a左移b位的結果,dd為a乘以2的b次方的結果因為d == dd,所以a左移兩位相當於a乘以2的b次方。

x為負數:

q為x右移b位的結果,qq為x除以2的b次方減去1的結果因為q == qq,所以x右移兩位相當於x除以2的b次方減去1;

p為x左移b位的結果,pp為x乘以2的b次方的結果因為p == pp,所以x左移兩位相當於x乘以2的b次方;

y為x無符號右移的結果,從y的數值可以看出y於x無任何算術關係,所以負數無符號右移只有邏輯意義,無任何算術意義。

總結:a << b左移位符,表示把a左移b位,在移位的時候計算機會先把a轉換成二進位制數進行移位,移位後在轉成十進位制數,

移位過程中如果a是正數就把a左移b位,並且在低位補0,如果a為負數把a左移b位,在低位補0;

所以左移就是把a(不論正負)左移b位,並且在低位補0;

a >> b右移位符,表示把a右移b位,在移位的時候計算機會先把a轉換成二進位制數進行移位,移位後在轉成十進位制數,

移位過程中如果a是正數就把a右移b位,並且在高位補0,如果a為負數把a右移b位,在高位補1;

也就是說如果為正高位補0,如果為負高位補1;

a >>> b無符號右移,把a右移b位,不論正負都要在高位補0。

a << b相當於a(不論正負)乘以2的b次方,a >> b相當於a(正數)除以2的b次方或者a(負數)除以2的b次方-1;

a>>>b相當於a(正數)除以2的b次方,如果a為負數則沒有算術意義。

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

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

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

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

C 移位運算 左移和右移

今天寫乙個比較有意思的東西 c 移位運算 左移和右移 c 是用 右移 運算子是用來執行移位運算。左移 將第乙個運算元向左移動第二個運算元指定的位數,空出的位置補0。左移相當於乘.左移一位相當於乘2 左移兩位相當於乘4 左移三位相當於乘8。x 1 x 2 x 2 x 4 x 3 x 8 x 4 x 1...