求一個 n 位的整數的二進制表式中有x個 1。
-
樣例:給定 32 (100000),返回 1;給定 5 (101),返回 2;給定 1023 (111111111),返回 9
-
解決方法:num & (num-1) 可以每次將最右邊的1消去,經過x次運算即可。
-
原理:分類討論、歸納總結
int countBit(int num){
int count = 0;
while(num != 0){
num = num & (num-1);
count++;
}
return count;
}
判斷一個數的二進制數里面1的個數的奇偶性,偶數返回0,奇數返回1。
- 樣例:給定 32 (100000),返回 1;給定 5 (101),返回 0;給定 1023 (111111111),返回 1
- 異或運算有如下規律,加上異或表判斷即可。
- a^b = b^a
- a ^ b ^ c = a ^ (b ^ c) = (a ^ b) ^ c
- d = a ^ b ^ c 可以推出 a = d ^ b ^ c
- aba = b
C語言代碼如下(關注點在val最低位的變化)
int odd(int x){
int val = 0;
while(x){
val ^= x;
x >>= 1;
}
return val & 0x1;
}