优化 if 语句中的条件

Optimization of the condition in the if-statement

提问人:helvacitaha 提问时间:10/15/2022 更新时间:10/15/2022 访问量:108

问:

好吧,我知道这个标题几乎没有意义,但我找不到更好的标题来解释我的问题。

所以我刚刚开始在 LeetCode 上做挑战,现在我才迈出第一步。但有一种情况让我感到困惑。

因此,我正在解决名为“1 位数”的问题,它基本上为您提供了一个无符号整数,并想知道其二进制表示中有多少个 1。

首先,我写了这段代码;

class Solution {
public:
int hammingWeight(uint32_t n) {
    
    int answer=0;
    
    while(n>0)
    {
        
        if(n%2)answer++;
        
        n/=2;
        
    }
    
    return answer;
}
};

然后我意识到它的运行时间为 3 毫秒。

然后我尝试了其他解决方案来优化它,并且我编写了最快的代码(我认为)。

class Solution {
public:
int hammingWeight(uint32_t n) {
    
    int answer=0;
    
    while(n>0)
    {
        
        if(n%2==1)answer++;
        
        n/=2;
        
    }
    
    return answer;
}
};

所以这个的运行时间为 0 毫秒。

我以为既然比较少,那就更快了。if(i%2)

唯一的区别是“if 命令”中的条件。

那么为什么比比快呢?if(i%2==1)if(i%2)

C++ IF-语句 优化 比较 Hammingweight

评论

0赞 Jesper Juhl 10/15/2022
en.cppreference.com/w/cpp/numeric/popcount

答:

1赞 thedemons 10/15/2022 #1

事实并非如此。您的两个代码将生成相同的机器代码

你的测量方法是错误的,你需要循环该函数数百万次才能得到一个无偏差的结果,而且结果是一样的。

教训是什么?不要试图优化 if 语句,在大多数情况下,你不会比编译器更聪明