移位操作符
阿新 • • 發佈:2018-09-05
ron short 操作數 分類 block 不能 class ring 操作符
移位操作符
- byte short char等類型進行移位前會先轉換成int型
- long 型轉換前後皆為long
- 符號左邊為操作數,右邊為操作數向左或向右移動的位數
- 移位 可與 等號組合使用
- eg.>>= 先移位再賦值給左邊的變量
分類:
- 左移位操作符 << :向左移動,低位補0
- 有符號右移位操作符 >> :向右移動,負數高位補1,正數高位補0
- 無符號右移位操作符 >>>:向右移動,高位補0 (c++/c 中都沒有)
舉例
public class Main { public static void main(String[] args) { int i = 100; System.out.println(Integer.toBinaryString(i)); System.out.println(Integer.toBinaryString(-i)); System.out.println(Integer.toBinaryString(i << 4)); System.out.println(Integer.toBinaryString(-i << 4)); System.out.println(Integer.toBinaryString(i >> 4)); System.out.println(Integer.toBinaryString(-i >> 4)); System.out.println(Integer.toBinaryString(i >>> 4)); System.out.println(Integer.toBinaryString(-i >>> 4)); } } result: 1100100 11111111111111111111111110011100 11001000000 11111111111111111111100111000000 110 11111111111111111111111111111001 110 1111111111111111111111111001
- think in java 中提到 只有數值右端的低5位才有用,這樣可防止我們移位超過int型值所具有的位數
- 因為int型占4字節,共32位,也就是說,一個操作數最多移動32位就毫無意義了,所以移位運算符右端的數字最大不能超過32位,即最大11111,一個數的低五位即可表示。
- 如果運算符右端的數字大於等於32,則可通過取32的模來得到真正需要移動的位數,eg. 1>>34,右邊的34>32,因此需要讓34對32取余,結果為34%32=2,因此真正的移位運算應該是1>>2
- 同理long型占8字節,共64位,運算符右端數值的低6位對應的十進制才是有效移動位數。
移位操作符