標籤:
Java提供的位元運算符有:左移( << )、右移( >> ) 、無符號右移( >>> ) 、位與( & ) 、位或( | )、位非( ~ )、位異或( ^ ),除了位非( ~ )是一元操作符外,其它的都是二元操作符。
print Binary:
System.out.printIn(Integer.toBinaryString(2)); //result is 10.
1、左移( << )
Test1、將5左移2位:
package com.xcy;public class Test { public static void main(String[] args) { System.out.println(5<<2);//運行結果是20 }}
運行結果是20,但是程式是怎樣執行的呢?
首先會將5轉為2進位表示形式(java中,整數預設就是int類型,也就是32位):
0000 0000 0000 0000 0000 0000 0000 0101 然後左移2位後,低位補0:
0000 0000 0000 0000 0000 0000 0001 0100 換算成10進位為20
2、右移( >> ) ,右移同理,只是方向不一樣罷了(感覺和沒說一樣)
System.out.println(5>>2);//運行結果是1
還是先將5轉為2進位表示形式:
0000 0000 0000 0000 0000 0000 0000 0101 然後右移2位,高位補0:
0000 0000 0000 0000 0000 0000 0000 0001
3、無符號右移( >>> )
我們知道在Java中int類型佔32位,可以表示一個正數,也可以表示一個負數。正數換算成二進位後的最高位為0,負數的二進位最高為為1
例如 -5換算成二進位後為:
1111 1111 1111 1111 1111 1111 1111 1011 (剛開始接觸二進位時,不知道最高位是用來表示正負之分的,當時就總想不通。。明明算起來得到的就是一個正數-_-)
我們分別對5進行右移3位、 -5進行右移3位和無符號右移3位:
package com.xcy;public class Test { public static void main(String[] args) { System.out.println(5>>3);//結果是0 System.out.println(-5>>3);//結果是-1 System.out.println(-5>>>3);//結果是536870911 }}
reference: http://blog.csdn.net/xiaochunyong/article/details/7748713
Java 位操作