[劍指offer]二進位制中1的個數
阿新 • • 發佈:2018-12-21
思路:
用1一直左移運算,和n的每位進行與運算,因為左移運算結果都為2的倍數,與運算結果不為0則說明有二進位制表示有1。
需要注意的是如果直接用n進行運算,如if((n&1)==1),之後還用n=n>>1的,如果為負數,經過右移最後一位就會變成1,而這就會陷入死迴圈。
實現:
public class Solution {
public int NumberOf1(int n) {
int count = 0;
int flag = 1;
while (flag != 0) {
if ((n & flag) != 0) {
count++;
}
flag = flag << 1;
}
return count;
}
}
大佬實現:
public class Solution {
public int NumberOf1(int n) {
int count = 0;
while (n != 0) {
++count;
n = (n - 1) & n;
}
return count;
}
}