1. 左移(<<)
0000 0000 0000 0000 0000 0000 0000 0101
然后左移2位后,低位補0:
0000 0000 0000 0000 0000 0000 0001 0100
換算成10進制為20
System.out.println(5 << 2);// 運行結果是20
2.右移(>>)
(右移跟符號有關, 正數(shù)左邊補零,負數(shù)補1)
整數(shù):
0000 0000 0000 0000 0000 0000 0000 0101
然后右移2位,高位補0:
0000 0000 0000 0000 0000 0000 0000 0001
System.out.println(5 >> 2);// 運行結果是1
負數(shù):
11111111111111111111111111111011(-5)
右移2位后為:
11111111111111111111111111111110
System.out.println(-5>>2);//運行結果為-2
3.無符號右移(>>>)高位補0
例如: -5換算成二進制后為:0101 取反加1為1011
1111 1111 1111 1111 1111 1111 1111 1011
我們分別對5進行右移3位、 -5進行右移3位和無符號右移3位:
System.out.println(5 >> 3);// 結果是0
System.out.println(-5 >> 3);// 結果是-1
System.out.println(-5 >>> 3);// 結果是536870911
4.位與( & )
位與:第一個操作數(shù)的第n位于第二個操作數(shù)的第n位如果都是1,那么結果的第n為也為1,否則為0
System.out.println(5 & 3);// 結果為1
System.out.println(4 & 1);// 結果為0
5.位或( | )
第一個操作數(shù)的第n位于第二個操作數(shù)的第n位 只要有一個是1,那么結果的第n為也為1,否則為0
System.out.println(5 | 3);// 結果為7
6.位異或( ^ )
第一個操作數(shù)的第n位于第二個操作數(shù)的第n位 相反,那么結果的第n為也為1,否則為0
System.out.println(5 ^ 3);//結果為6
7.位非( ~ )
操作數(shù)的第n位為1,那么結果的第n位為0,反之。
System.out.println(~5);// 結果為-6