1. 程式人生 > >java的位運算子的理解和使用

java的位運算子的理解和使用

常見的位運算子如下圖:

具體規則如下

第一部分:

  1. &----有0則0
  2. |------有1則1
  3. ^-----相同為0,不同為1
  4. ~-----0變1,1變0 
// 分析 先把資料轉換為二進位制
// 3的二進位制 11,補碼 00000000 00000000 00000000 00000011
// 4的二進位制100,補碼 00000000 00000000 00000000 00000100
int a=3;
int b=4;
System.out.println(3&4); //0----有0則0
System.out.println(3|4); //111-----7   有1則1
System.out.println(3^4); //111------7  相同為0,不同為1
System.out.println(~3); //-4 0變1,1變0   
// 補碼:11111111 11111111 11111111 11111100
// 反碼:11111111 11111111 11111111 11111011
// 原碼:10000000 00000000 00000000 00000100	

第二部分:

  1. 一個數據被位運算(^)倆次,其結果不變
     System.out.println(3^4^4); //3
     System.out.println(4^3^3); //4
  2. 把<<左邊的資料向左移幾位,相等於左邊的資料乘以2的移動次冪
    System.out.println(3<<2); // 3*2^2=12
    /*
     <<左移
    			計算3的二進位制:11
    				00000000 00000000 00000000 00000011
    		   (00) 00000000 00000000 00000000 00001100
    */
  3. 把>>左邊的資料右移幾位,相等於左邊的資料除以2的移動次冪
    System.out.println(-4>>2); //-4/2^2=-1
    /*	
    		   計算出4的二進位制:0100
    				原碼:10000000 00000000 00000000 0000100
    				反碼:11111111 11111111 11111111 1111011
    				補碼:11111111 11111111 11111111 1111100
    					  11111111 11111111 11111111 11111111(00) 補碼
    			
    				補碼:11111111 11111111 11111111 11111111
    				反碼:11111111 11111111 11111111 11111110
    				原碼:10000000 00000000 00000000 00000001
    				
    				結果:-1
    */
  4.  >>>(無符號右移)------無論最高位是0還是1,左邊補齊0

    System.out.println(-4>>>2);
    /*
    計算出4的二進位制:0100
    				原碼:10000000 00000000 00000000 0000100
    				反碼:11111111 11111111 11111111 1111011
    				補碼:11111111 11111111 11111111 1111100
    					  0011111111 11111111 11111111 11111(00)
    			
    				結果:1073741823
    */

   注意:

  1. 首先把資料轉換為二進位制
  2. &,|,^當倆邊是資料做位運算,倆邊是布林值做邏輯運算