关于牛客网《剑指offer》之二进制中1的个数疑惑?-已解决
代码思路为:用1作为一个flag,然后将这个flag左移并与n的每一位进行位与操作,即
n: 0 1 0 1 0 1 0 (不动)
flag: 1 (左移)
但是遇到一个编码问题,如下:
class Solution {
public:
int NumberOf1(int n) {
int count = 0;
unsigned int flag = 1;
while(flag){
// if((n & flag) == 1)
if(n & flag) //如果n与flag位与的结果为1
count++;
flag = flag << 1; //将1左移
}
return count;
}
}; 为什么if(n & flag)不能使用if((n & flag) == 1),是因为位与的返回值不能与1比较吗?可是位与操作与0 1 与的结果:1&0 = 0, 0&1 = 0, 0&0 = 0, 1&1 = 1,返回值要么为0,要么是1,如果代码中flag 与 n按位与之后的结果是1,那么if(1==1)成立,则count++,否则if(0==1)返回的false,则count不操作,继续将flag左移。 我这样理解哪里出了问题呢?


