移位運算符是在數字的二進制形式上進行平移。主要有左移(<<)、帶符號右移(>>)以及無符號右移(>>>)。
- 左移運算符(<<)的運算規則為:按二進制形式將數字左移相應位數,高位捨棄,低位補零。
- 帶符號右移運算符(>>)的運算規則為:按二進制形式將數字右移相應位數,低位捨棄,高位正數補零,負數補1。
- 無符號右移運算符(>>>)的運算規則為:按二進制形式將數字右移相應位數,低位捨棄,高位補零。
- int a=-8;
- System.out.println(a << 2);
- System.out.println(a >> 2);
- System.out.println(a >>> 2);
輸出結果為
-32
-2
1073741822
值得注意的移位運算其實可以看做對類型的位數取余後的移位。java中int是32位,long是64位。比如對int型的數字做左移40位的操作,與左移40%32=8位效果是相同的。若對int型做移位32*n的運算,則相當於什麼都沒做。
而對於byte、char以及short,在做移位運算時會自動類型轉換成int型。因此對於下面的代碼,輸出為8 8 8 8 0
- byte b=8;
- short s=8;
- char c=8;
- int i=8;
- long l=8;
- System.out.println(b >> 32);
- System.out.println(s >> 32);
- System.out.println(c >> 32);
- System.out.println(i >> 32);
- System.out.println(l >> 32);