首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >哪个更快(mask >> I& 1)或(mask &1 << i)?

哪个更快(mask >> I& 1)或(mask &1 << i)?
EN

Stack Overflow用户
提问于 2011-03-26 01:28:37
回答 8查看 673关注 0票数 0

在我的代码中,我必须选择这两个表达式中的一个(where mask和I非常数整数-1 < i < (sizeof(int) << 3) + 1)。我不认为这会使我的程序表现更好或更差,但它对我来说非常有趣。你知道哪一个更好吗?为什么?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2011-03-26 01:40:41

C表达式不能“快”或“慢”,因为CPU不能直接计算它们。

哪一个“更快”取决于你的编译器能够为这两个表达式生成的机器代码。如果你的编译器足够聪明,意识到在你的上下文中两者做的是相同的事情(例如,你简单地将结果与零进行比较),它可能会为两个变体生成相同的代码,这意味着它们将同样快。在这种情况下,生成的机器码很可能根本不像原始表达式中的操作序列(即没有移位和/或没有按位and)。如果你在这里尝试做的仅仅是测试一位的值,那么除了移位和位与的组合之外,还有其他方法可以做到这一点。其中许多“其他方式”不能在C中表达,你不能在C中使用它们,而编译器可以在机器代码中使用它们。

例如,x86 CPU有一个专用的位测试指令BT,它根据特定位的编号提取该位的值。因此,聪明的编译器可能会简单地生成如下内容

代码语言:javascript
复制
MOV eax, i
BT  mask, eax
...

对于你的两个表达式(假设它更有效,我不确定)。

票数 3
EN

Stack Overflow用户

发布于 2011-03-26 01:31:52

首先,当你发现自己在问“哪个更快”时,你的第一反应应该是自己分析、测量并找出答案。

其次,这是一个非常小的计算,几乎可以肯定它对应用程序的性能没有影响。

第三,两者在性能上很可能是相同的。

票数 5
EN

Stack Overflow用户

发布于 2011-03-26 01:31:26

使用任何一个,让您的编译器随心所欲地对其进行优化。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5435997

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档