C++ 差值b/w 1==n&;1及n&;1==1,n是无符号整数

C++ 差值b/w 1==n&;1及n&;1==1,n是无符号整数,c++,c,operator-precedence,C++,C,Operator Precedence,这是一个。它给出一个无符号整数n,要求返回位“1”的数字 int hammingWeight(uint32_t n) { int num=0; for(;n!=0;n=n>>1) { if(n&1==1) { num++; } } return num; } 这很好,但是 int hammingWeight(uint32_t n) { int num=0; for(;n!=0;n=n>>1) { if(1==n&a

这是一个。它给出一个无符号整数n,要求返回位“1”的数字

int hammingWeight(uint32_t n) {
int num=0;
for(;n!=0;n=n>>1)
{
    if(n&1==1)
    {
        num++;
    }
}
return num;
}
这很好,但是

int hammingWeight(uint32_t n) {
int num=0;
for(;n!=0;n=n>>1)
{
    if(1==n&1)
    {
        num++;
    }
}
return num;
}

这个有时不能用!我想当我用uint32 t进行计算时,有些地方出了问题,但我不能清楚地理解这一点。

==
的优先级高于
&
。因此,

  • n&1==1
    n&(1==1)
    ,而
  • 1==n&1
    (1==n)&1

你根本不需要
==1
,用
if(n&1)
@dasblinkenlight代替它,这对
n&(1==1)
(n&1)==1
:)这两种解释都有效,这不是对你问题的直接回答,但你可能会觉得有趣。除此之外,您可以通过将
n=n>>1
更改为
n=n&(n-1)
@Johannes Schaub-litb来提高您自己代码的平均运行时性能。它们是一样的。@barak manos非常感谢,我可以理解
n=n&(n-1)
每次都可以删除“1”,但为什么速度更快?似乎
n=n>>1
只需要SHR,但
n=n&(n-1)
需要更多。