如何解决ODD 的 AND 与 MOD
编程中最基本的操作之一是确定给定的 x
是偶数还是奇数。常见的做法是:
ODD(x) = x MOD 2 == 1
另一个不太受欢迎的变体是:
ODD(x) = x AND 1 == 1
众所周知,那些~bit hacks~比除法更快。我想知道是否有人遇到过将 MOD 2
替换为 AND 1
带来显着优化的情况。
除了时间之外,每种方法的优点和缺点是什么?
就个人而言,我可能会指出 MOD m
适用于任何 m
,而 AND 1
不能针对其他模数进行调整。
解决方法
通过现代编译器优化,在这种情况下,我会追求源代码的清晰度。
以使用 GCC C++ 编译器为 AND 情况 (https://godbolt.org/z/sPqM6f) 生成的可执行代码与为 MOD 情况 (https://godbolt.org/z/vM6r3q) 生成的代码为例。它们是相同的。不仅相似,而且完全相同,因为编译器将 MOD 2
操作识别为可以优化的特殊情况。
随着编译器优化越来越好,汇编指令也越来越多,我个人倾向于更多地追求源代码(包括伪代码)的清晰度,而不是试图将编译器推到我认为是优化的东西中。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。