java位運算應用

2021-07-07 10:41:33 字數 1199 閱讀 9815

1.  判斷int型變數a是奇數還是偶數    

a&1  = 0 偶數 

a&1 =  1 奇數 

2.  求平均值,比如有兩個int型別變數x、y,首先要求x+y的和,再除以2,但是有可能x+y的結果會超過int的最大表示範圍,所以位運算就派上用場啦。

(x&y)+((x^y)>>1); 

3.  對於乙個大於0的整數,判斷它是不是2的幾次方

((x&(x-1))==0)&&(x!=0); 

4.  比如有兩個int型別變數x、y,要求兩者數字交換,位運算的實現方法:效能絕對高效

x ^= y; 

y ^= x; 

x ^= y; 

5. 求絕對值

int abs( int x ) 

針對以上**分析如下:

~1、 y = x > > 31 ;//右移31位,只保留符號位,如果是負數,則是-1,其二進位制為1111 1111 1111 1111,全為1,如果是正數,則全0

~2、x^y//x與y的異或運算,按位進行異或,當y=0時,實際上二者異或後運算的值保持不變,當y=-1時,則實際上是將原值每位求反(1變成0,0變成1)

~3、-y//當y為0時保持不變,為-1時,則表示加1,因此

(x^y)-y當y=0時,表示保持x不變,當y=-1時,則表示將x各位求反後加1,實際上就是對該數求負,由於原來就是負數,因此就是變成正數。

綜上所述,該過程就是求絕對值。

~6.  取模運算,採用位運算實現:

a % (2^n) 等價於 a & (2^n - 1) 

~7.  乘法運算   採用位運算實現

a * (2^n) 等價於 a << n

~8.   除法運算轉化成位運算

a / (2^n) 等價於 a>> n 

~9.   求相反數

(~x+1) 

~10  a % 2 等價於 a & 1 

6.  取模運算,採用位運算實現:

a % (2^n) 等價於 a & (2^n - 1) 

7.  乘法運算   採用位運算實現

a * (2^n) 等價於 a << n

8.   除法運算轉化成位運算

a / (2^n) 等價於 a>> n 

9.   求相反數(符號位也相反了)

(~x+1) 

10  a % 2 等價於 a & 1 

參考自:

Java位運算應用

測試 在github 常見的位運算包括 與 或 非 異或 左位移 右位移 或 包含關係判斷 定義 0000 private static final int flag one 0x1 0010 private static final int flag two 0x2 0100 private st...

位運算應用

位運算 針對整型 字元型,計算機會將它轉換為二進位制運算 1 按位與 x y 對應位都為1時才為1 用途 取 保留1個數的某位 對應掩碼的對應位為1 其餘各位置1 2 按位或 x y 對應位都為0才為0,否則為1 用途 將1個數的某些位置1,其餘不變 3 按位異或 x y 對應位相同為0,不同為1 ...

位運算應用

1.判斷乙個數的奇偶性。x 1 101 1 1 2.判斷x是否是2的正整數冪。x x 1 100 011 0 3.取出乙個數的某些二進位制位。3.1.x 1 d 1 10101 1 3 1 00100 取第d位 3.2.x 1 d 1 10101 1 3 1 00101 取最後d位,x對2 d取模 ...