在 C++ 命令中是真的吗
n & 1
比
% 2?
(其中 n 是 int 类型)
在全球范围内,有什么方法可以比使用 % 运算符更快地找到整数模 2 的余数?提前致谢。
在 C++ 命令中是真的吗
n & 1
比
% 2?
(其中 n 是 int 类型)
在全球范围内,有什么方法可以比使用 % 运算符更快地找到整数模 2 的余数?提前致谢。
哪个使用或多或少的内存高度依赖于指令编码,但如果编译器没有针对同一事物n & 1
进行优化,则可以快很多倍[1] 。n % 2
当然,许多编译器确实会进行这种优化(或者可能会做同样的事情但处理对 有有趣影响的负数,%
不需要&
“关心”)。
请注意,根据您想要实现的具体目标,负数需要& 1
在使用之前进行特殊处理。如果 gettting 1
from-1 & 1
很好,那么 using&
确实是一个有效的选项,但在数学上有点奇怪。
另请注意,始终在比较性能时,您需要进行自己的基准测试[或非常了解特定编译器为特定处理器模型生成的内容],您不能总是依赖您在互联网上阅读的内容 - 包括我的帖子。
[1] 作为比较,大多数现代处理器在单个时钟周期内执行 AND,并且通常可以并行执行多个此类操作。用于余数的整数除法绝对不是那么快。我碰巧有一份 2012 年 1 月的 AMD 优化指南,适用于“15 系列”处理器。以“余数”为答案的 32 位除法运算最多需要 39 个时钟周期。因此,假设编译器没有优化%
为 AND 指令,它的使用%
比使用它要差大约 40-80 倍&
——当然假设它是一个有效的优化。