左移操作: x
x可以是byte, short, char, int, long基本型, n(位移量)只能是int型
編譯器的執行步驟:
1) 如果x是byte, short, char類型, 則將x提升為int;
2) 如果x是byte, short, char, int類型, 則n被重新賦值(過程是:取n的補碼的低5位再轉成十進制的int值,相當對n取32模: n=n%32);
如果x是long型, 則n被重新賦值(過程是:取n的補碼的低6位再轉成十進制的int值,相當對n取64模: n=n%64);
(因為int型別為4個位元組,即32位元,移動32位元將沒有任何意義.對於long則是模64)
3) 對x左移n個位數, 整個表達式產生一個新值(x的值不變);
>>是帶符號位的右移符號,x>>1就是x的內容右移一位,如果開頭是1則補1,是0責補0,( x的內容不改變).
>>>是不帶符號位的右移,x>>>1就是x的內容右移一位,開頭補0(x的內容並不改變)
補充說明:
Java代碼
// 左移: 向左移动,右边补0 for (int i = 0;i < 8 ;i++) System.out.print( (1 << i) + " ");
output
1 2 4 8 16 32 64 128
// 右移: 向右移动,如果符号位(int型为32位)为0,左边补0,符号位为1,左边补1 // 符号位为1的右移 for (int i = 0;i < 8 ;i++) System.out.print( Integer.toHexString(0x40000000 >> i) + " ");
output
00 00 1000000 800000// 符号位为1的右移 // 最高4位为1000, 右移1位,变成1100也就是c, for (int i = 0;i < 8 ;i++) System.out.print( Integer.toHexString(0x80000000 >> i) + " ");
System.out.println(Integer.toHexString(0x80000000 >> 31)); // output: ffffffff System.out.println(Integer.toHexString(0x80000000 >> 32)); // output: 80000000
1L << bitIndex
更多Java的位移運算巧方法相關文章請關注PHP中文網!