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取模 ...