提问人:helvacitaha 提问时间:10/15/2022 更新时间:10/15/2022 访问量:108
优化 if 语句中的条件
Optimization of the condition in the if-statement
问:
好吧,我知道这个标题几乎没有意义,但我找不到更好的标题来解释我的问题。
所以我刚刚开始在 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)
答:
1赞
thedemons
10/15/2022
#1
事实并非如此。您的两个代码将生成相同的机器代码。
你的测量方法是错误的,你需要循环该函数数百万次才能得到一个无偏差的结果,而且结果是一样的。
教训是什么?不要试图优化 if 语句,在大多数情况下,你不会比编译器更聪明
评论