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...