【发布时间】:2020-05-10 12:32:09
【问题描述】:
假设我有一个整数,它是 2 的幂,例如。 1024:
int a = 1 << 10; //works with any power of 2 no.
现在我想检查另一个整数b 是否与a 相同。哪个更快/更好(尤其是在弱嵌入式系统上):
if (b == a) {}
或
if (b & a) {}
?
对不起,如果这是一个菜鸟问题,但无法使用搜索找到答案。
编辑:感谢您提供许多有见地的答案。我只能选择其中一个,但都欢迎。
【问题讨论】:
-
您想使用
==,因为b & a将测试任何您拥有1的任何对应位的任何位集为真。使用适当的比较编写代码并让编译器处理优化。见:Replacing “==” with bitwise operators -
将 a 定义为
1<<n保证它只设置了 1 位。我经常阅读这个建议“让编译器决定”。但对我来说,当我想更好地了解内部运作时,这个建议有点不满意。感谢您的链接。 -
我明白你在说什么,是的,2 的幂只会设置一个位 - 但同样适用 - 使用
==并让编译器优化。编译器将优化为cmp,然后使用sete在可能的情况下提供返回。 -
a & b不会做你想做的事,但a ^ b(否定)会。 -
这取决于编译器的质量以及目标 CPU 如何实现相关汇编语言的规范(每种指令的时钟周期数),所以我必须更具体。
标签: c if-statement bitwise-and equals-operator