與運算&
對于一個正整數(shù)x來說,對x進行 x&(x-1)操作其實就是將x的二進制表示法中最后一個1換成0,以下代碼可以對x的二進制表示的1的個數(shù)進行統(tǒng)計 Java
public static int num1(int x) {
int count = 0;
while (x > 0) {
count++;
x = x & (x - 1);
}
return count;
}
相似地,x|(x+1)操作是將x的二進制表示法中的最后一個0換成1.
2.異或運算 ^
相同得0 ,相異得1;
對任意整數(shù)a,b, c有 :
0^a = a; a^a =0; a^b = b^a; a^b^c = a^(b^c)
- 異或運算交換兩個值:
```Java```
a = a^b ;
b = a^b; // b =a^b^b = a
a = a^b; // a = a^b^a = b
異或運算解single num 問題 (leetcode 136):Given an array of integers, every element appears twice except for one. Find that single one. Java
public int singleNumber(int[] nums) {
int a = nums[0];
for(int i = 1; i< nums.length; i++){
a = a^nums[i];
}
return a;
}