分析:刚开始看到这道题就知道是对于二进制位运算,但是当时考虑的是先将整数转化为二进制数,然后进行位运算;然而是可以直接将整数进行与运算的,走入了一个误区。
求1的个数,可以把输入的整数n和1做与运算,判断n的最低位是不是为1,接着就把1左移一位(二进制10),得到2,再和n做与运算,就能判断n的次数是不是1.................这样反复的左移,每次判断n的其中一位是不是1。
下面是代码:
public class Solution {
public int NumberOf1(int n) {int count=0;
int flag=1;
while(flag!=0){
if((n & flag)!=0)
count++;
//对1进行左移操作,由1变成二进制10即十进制2,然后再左移,变成二进制100即十进制4,.....................
flag=flag<<1;
}
return count;
}
}