位運算符和位移運算符

在java靈活的使用中,運用更底層的位運算和位移運算有助於提高運算效率。特別是在閱讀源碼的時候,很多底層代碼都是通過基礎運算符來實現的。

比如lucene中的一個示例:

if ( true ) {
      int pp = STORED | BINARY;
      if ( true )   {

            throw new RuntimeException("SchemaField: " + name + " conflicting stored field options:" + props);
      }
      p &= ~pp;
 }

位運算符: 

&(與)      AND 

|(或)      OR 

^(異或)    XOR 

~(非)      NOT 


位移運算符:

>>(右移) 

<<(左移)

>>>(右移,左邊空出的位以0填充) 


位運算符用於位運算,那就只能對整型或者字符型進行運算。而除了~(非)是一元運算符之外其他的都爲二元運算符。 
所有位運算都會把值轉爲二進制進行運算 

&
(與) 
 
運算規則:0&0=0  0&1=0  1&0=0   1&1=1 

 即:兩位同時爲1時,結果爲1,否則爲0 

int a=(3&5);  
System.out.println(a);  
System.out.println(Integer.toBinaryString(3));   
System.out.println(Integer.toBinaryString(5)); 
結果:
1 
011 
101 
解析:3的二進制爲0115的二進制爲101,與操作結果爲001。轉爲十進制是1


|(或) 
     
運算規則: 0|0=0   0|1=1  1|0=1   1|1=1 
      
即:參加運算的兩個對象只要有一個爲1,其結果就爲1 

int a=(3|5);  
System.out.println(a);  
System.out.println(Integer.toBinaryString(3));   
System.out.println(Integer.toBinaryString(5)); 
結果:
7 
011 
101 
解析:3的二進制位0115的二進制位101。或操作結果爲111。轉爲10進製爲7


 ^(異或) 
   
運算規則:0
^0=0  0^1=1   1^0=1   1^1=0 
     
即:參加運算的兩個對象,如果兩個個相應位爲(值不同),則該位結果爲1,否則爲0 int a=(3^5);

int a=(3^5);  
System.out.println(a);  
System.out.println(Integer.toBinaryString(3));   
System.out.println(Integer.toBinaryString(5)); 
結果:
6 
011 
101 
解析:3的二進制位0115的二進制位101。或操作結果爲110。轉爲10進製爲6 


~(非) 
   
運算規則:~1=0  ~0=1          
     
即:對一個二進制數按位取反,即0變爲11變爲0 ,~運算符的優先級比算數運算符、關係運算符、邏輯運算符和其他運算符都高 


<<(左移) 

   將一個運算符對象的各二進制位全部左移諾幹位(左邊的二進制位丟棄,右邊補0 
    
操作數每左移一位,相當於該數乘以2

int a=(3<<2);  
System.out.println(a);  
System.out.println(Integer.toBinaryString(3));   
System.out.println(Integer.toBinaryString(12)); 
結果:
12 
11 
1100 
解析:此運算符的意思就是把3的二進制位全部左移兩位,右邊補2個0。3的二進制位11,左移兩位後,右邊補2個0就是1100。1100轉爲10進製爲12。 
說到底左移操作就相當於2的2次方×3。 每左移1位次方就增1 

>>(右移) 
將一個數的各二進制位全部右移諾幹位,正數左補0,負數左補1,右邊丟棄。 
操作數每右移一位,相當於該數除以2 
int a=(9>>1);  
System.out.println(a);  
System.out.println(Integer.toBinaryString(9));   
System.out.println(Integer.toBinaryString(4));

結果:

1001 
100 
解析:9的二進制爲1001,右移1位後,左正數補0,右邊丟棄。結果爲 0100。轉爲10進制後爲4。










  


















發佈了39 篇原創文章 · 獲贊 7 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章