C++ 差值b/w 1==n&;1及n&;1==1,n是无符号整数
这是一个。它给出一个无符号整数n,要求返回位“1”的数字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
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)
需要更多。