AND 与 MOD 对于 ODD

AND vs. MOD for ODD

编程中最基本的操作之一是确定给定的 x 是偶数还是奇数。常见的做法是:

ODD(x) = x MOD 2 == 1

另一个不太受欢迎的变体是:

ODD(x) = x AND 1 == 1

众所周知,那些 ~bit hacks~ 比除法更快。我想知道是否有人 运行 遇到过用 MOD 2 替换 AND 1 带来显着优化的情况。

除了时间之外,每种方法的 PROCON 是什么? 就个人而言,我可能会指出 MOD m 适用于任何 m,而 AND 1 不能针对其他模数进行调整。

通过现代编译器优化,在这种情况下我会追求源代码的清晰度。

例如,查看使用 GCC C++ 编译器为 AND 案例 (https://godbolt.org/z/sPqM6f) vs. the code generated for the MOD case (https://godbolt.org/z/vM6r3q) 生成的可执行代码。它们是相同的。不仅相似,而且完全相同,因为编译器将 MOD 2 操作识别为可以优化的特例。

随着编译器优化变得越来越好,汇编程序指令也越来越多,我个人倾向于更多地追求源代码(包括伪代码)的清晰度,而不是试图将编译器推向我认为是优化的东西.