-
異或、與的一點總結(這些位運算真的是騷操作2333)
-
兩個相同的數字:
a^a=0
-
取出一個數最右端為1的那一位:
a &=-a
其中
-a
是在計算機中就是a
的補碼表示(這樣所有的加法運算可以使用同一種電路完成),因為補碼等於原碼的反碼+1,所以a&-a
就是a最右邊一位為1,其他位為0的數
。另外:
~a = -a-1
已知負數的補碼,求其原碼:左右找1,此兩1不變,中間取反。
-
x&x-1 ==0
-判斷 是否是2的n次方。
-把一個整數減去1,再和原整數做與運算,會把該整數最右邊一個1變成0.那么一個整數的二進制有多少個1,就可以進行多少次這樣的操作。
-
x&1 最低位二進制數,可以用來判斷奇偶
-
一個數字除以2
x>>1
效率更高
-
-
利用邏輯與
&&
的短路原理,可以實現類似if
判斷的功能。例如:實現1+2+3+……+n
//1.需利用邏輯與的短路特性實現遞歸終止。 2.當n==0時,(n>0)&&((sum+=Sum_Solution(n-1))>0)只執行前面的判斷,為false,然后直接返回0; //3.當n>0時,執行sum+=Sum_Solution(n-1),實現遞歸計算Sum_Solution(n)。 public int Sum_Solution(int n) { int sum = n; boolean ans = (n>0)&&((sum+=Sum_Solution(n-1))>0); return sum; }
-
利用
&
和^
實現加法public int Add(int num1,int num2) { while(num2!=0){ int tmp=num1^num2; num2=(num1&num2)<<1;//進位 num1=tmp; } return num1; }