【发布时间】:2019-02-07 18:56:00
【问题描述】:
假设我正在检查奇数:
(i % 2 == 1)
编译器会将该操作转换为:
if(a & 1)
?
我知道按位运算更快,有时我会使用位。
但是我的问题是:如果普通算术更具可读性(在大多数情况下),如果编译器稍后可能会转换它,我应该何时使用按位?
或者我是否应该在可能的情况下始终使用按位(即使它不太可读)?
【问题讨论】:
-
你可以相当肯定编译器会为你优化这些琐碎的东西(当然,只要你编译时启用了优化)。但是,只需检查生成的 asm 以确保。
-
如果您关心的是速度,那么您可以编写一个测试函数,执行 100 000 次之类的替代方案之一,对其计时,然后对其他替代方案执行相同操作并进行比较。使用调试版本和发布版本,您会感到惊讶。
-
顺便说一下,如果
i已签名并且可以为负数,i % 2 == 1将不起作用
标签: c++ compilation bit-manipulation