在我的代码中,我必须选择这两个表达式中的一个(where mask和I非常数整数-1 < i < (sizeof(int) << 3) + 1)。我不认为这会使我的程序表现更好或更差,但它对我来说非常有趣。你知道哪一个更好吗?为什么?
发布于 2011-03-26 01:40:41
C表达式不能“快”或“慢”,因为CPU不能直接计算它们。
哪一个“更快”取决于你的编译器能够为这两个表达式生成的机器代码。如果你的编译器足够聪明,意识到在你的上下文中两者做的是相同的事情(例如,你简单地将结果与零进行比较),它可能会为两个变体生成相同的代码,这意味着它们将同样快。在这种情况下,生成的机器码很可能根本不像原始表达式中的操作序列(即没有移位和/或没有按位and)。如果你在这里尝试做的仅仅是测试一位的值,那么除了移位和位与的组合之外,还有其他方法可以做到这一点。其中许多“其他方式”不能在C中表达,你不能在C中使用它们,而编译器可以在机器代码中使用它们。
例如,x86 CPU有一个专用的位测试指令BT,它根据特定位的编号提取该位的值。因此,聪明的编译器可能会简单地生成如下内容
MOV eax, i
BT mask, eax
...对于你的两个表达式(假设它更有效,我不确定)。
发布于 2011-03-26 01:31:52
首先,当你发现自己在问“哪个更快”时,你的第一反应应该是自己分析、测量并找出答案。
其次,这是一个非常小的计算,几乎可以肯定它对应用程序的性能没有影响。
第三,两者在性能上很可能是相同的。
发布于 2011-03-26 01:31:26
使用任何一个,让您的编译器随心所欲地对其进行优化。
https://stackoverflow.com/questions/5435997
复制相似问题