【发布时间】:2013-12-05 06:52:58
【问题描述】:
在正常流程或条件语句(如for、if 等)中使用按位运算会提高整体性能吗?在可能的情况下使用它们会更好吗?例如:
if(i++ & 1) {
}
对比
if(i % 2) {
}
【问题讨论】:
-
这是一个人人都知道的技巧,包括编译器。在其他情况下,使用按位运算会有所帮助。这取决于替代方案是什么。
-
为什么第一个条件包含
i的后缀增量而第二个不包含?当两段代码的性能不同时,比较两段代码的性能是毫无意义的。 -
涉及至少一个编译时常数的整数除法/模数将由编译器优化为一系列乘法和位移。
-
我个人喜欢 (i & 0xFF) vs (i % 0x100)。如果我说“你的出生年份的正确两位数是多少”,以十为基数,你不会认为,“哦,电话接线员想知道我的出生年份模 100 ......”你只会吐出数字忘记它。为什么人们认为 mod 更容易阅读?每次看到它时,我都必须检查变量是否已签名。这并不容易阅读。使用 (&) 根本不是过早的优化。
标签: c++ bit-manipulation bitwise-operators