Java:位移運算符
阿新 • • 發佈:2018-01-02
pub args pri info idt ext static eight 符號位
Java中有三個位移運算符,用於對int類型整數的二進制表示進行操作:
1. "<<": 左移運算符,在二進制表示末尾添加“0”,之前的其他位相當於左移了一位,可看作成“乘以二”操作。
例如,a = 10,a 的二進制表示為“0000 0000 0000 0000 0000 0000 0000 1010”,“a << 1”表示a的二進制表示左移一位,結果為“0000 0000 0000 0000 0000 0000 0001 0100”,對應十進制的“20”。
b =-10, b 的二進制表示為“1111 1111 1111 1111 1111 1111 1111 0110”,“b<<1”代表b的二進制表示左移一位,結果為“1111 1111 1111 1111 1111 1111 1110 1100”,對應十進制“-20”。
2. ">>": 右移運算符,去掉二進制表示末尾幾位,並在最前面添加符號位,正數添“0”、負數添“1”。">>1"去掉最後一位,">>2"去掉最後兩位。不能單純的看作成“除以二”操作。
例如,a = 9, “a>>1"代表a的二進制表示“0000 0000 0000 0000 0000 0000 0000 1001”右移一位,結果為“0000 0000 0000 0000 0000 0000 0000 0100”,對應十進制的“4”(不是“除以二”操作)。
b = -9,“b>>1”代表b的二進制表示“1111 1111 1111 1111 1111 1111 1111 0111”右移一位,結果為“1111 1111 1111 1111 1111 1111 1111 1011”,對應十進制的“-5”。
3. "<<<": 無符號右移運算符,不再考慮符號位,在最前面添加“0”。(正數前面的“0”符號位可以省略)
例如,b = -9,“b >>> 1”代表b的二進制表示“1111 1111 1111 1111 1111 1111 1111 0111”右移一位,結果為“0111 1111 1111 1111 1111 1111 1111 1011”,對應十進制的“2147483643”。
public class Test { public static void main(String[] args) { int a = -9; System.out.println("a = " + a); System.out.println("a的二進制表示: " + Integer.toBinaryString(a)); System.out.println(""); // "<<"左移運算符 int a1 = a << 1; System.out.println("a<<1 = " + a1); System.out.println("a<<1後的二進制表示: " + Integer.toBinaryString(a1)); System.out.println(""); // ">>"右移運算符 int a2 = a >> 1; System.out.println("a>>1 = " + a2); System.out.println("a>>1後的二進制表示: " + Integer.toBinaryString(a2)); System.out.println(""); // 無符號右移運算符 int a3 = a >>> 1; System.out.println("a >>> 1 =" + a3); System.out.println("a>>>1後的二進制表示: " + Integer.toBinaryString(a >>> 1)); } }
運行結果:
2018-01-02 18:51:21
Java:位移運算符