math - if(n%2==0) 或 if(n&1==0) 哪个更快找到偶数?
问题描述
if(n%2==0) 或 if(n&1==0) 哪个更快找到偶数?
def isEven(n):
if n%2 == 0:
return True
return False
OR
def isEven(n):
if n&1 == 1:
return False
return True
解决方案
我希望这些表达式等效于等效地实现这两个选项的语言的合理优化编译器。
事实上,我尝试了四种不同的 C++ 编译器:gcc、clang、MSVC 和 icc,虽然每个编译器都实现了与其他编译器不同的习语1,但四分之三的编译器以相同的方式实现了这两个习语。
只有 icc 生成了不同的代码,并且在这种情况下(n & 1) == 0
生成的代码比n % 2 == 0
- 但您应该考虑到一个 icc 错误。
但是, 并非所有语言都实现优化编译器(提前或 JIT),特别是解释器可能会或可能不会类似地优化它。如果您对特定语言或平台感兴趣,您可以考虑标记您的问题以反映这一点。
1对于如此简单的代码,这实际上是令人惊讶和不寻常的。总体而言,clang 生成了最好的代码,其次是 MSVC,然后是 gcc。icc 为该n % 2
选项生成了非常糟糕的代码。奇怪的是,gcc 在-O1
比-O2
.
推荐阅读
- javascript - 如何在 WebRTC 通话期间锁定视频大小?
- angular - 使用 TemplateRef 列表作为 ChildrenContent
- c++ - 双递归分段错误 C++
- spring - Spring Maven项目中的404错误
- reactjs - 加载图像时更新画廊
- vba - 两个工作簿之间的匹配字符串值
- ethereum - 使用 IPFS 评估 DApp(智能合约)存储概念
- reactjs - 如何将更改的状态发送到 react-native 中的组件?
- reactjs - 使用 Link 加载组件,然后根据所选项目加载数据
- java - 在 IntelliJ 中设置包名称的快捷方式