【发布时间】:2011-12-14 03:36:38
【问题描述】:
我发现了一些示例源代码,作者似乎使用按位& 运算符而不是% 运算符。但是,当我尝试 x & 4 时,它不会产生与 x % 5 相同的值。
【问题讨论】:
-
@user988052 仍然是。在 .NET 下快 10%(刚刚测试),代码在这里ideone.com/BLqZP(但请注意,在 ideone 上差异要小得多)。发布 + 不带调试器运行。
-
@user988052:按位计算,仍然比任何必须处理所有数字的通用
mod实现更快。但是这种优化是如此著名和简单,以至于许多编译器都实现了它,所以是的。 @xanatos:在进行基准测试时,请务必先让 JIT 预热。 -
@xanatos:当我在谈论 “快得多” 时,我在谈论 bitwise 需要一两个CPU 周期和模数,使用寄存器中 div 的剩余部分,如果不是更多,则需要接近 CPU 20 个周期。因此,当我的意思是“快得多” 时,我指的是快快一个数量级(如果不是更多,10 倍,具体取决于硬件)。正如delnan 所指出的,我说的不是仅仅10%,现在无论如何都可以自动优化; )
-
@delnan 哇!!这是真的!!!热的时候!!! 天气很暖和!!不,没有区别!尝试了 100 次循环,只查看了最后一个基准。 C# 没有完全优化 & 和 %
-
编译器只能对无符号值或已知为正的有符号值进行此优化。这意味着有时人类可以在编译器无法执行此优化的情况下执行此优化(因为人类具有编译器缺乏的先验知识)。
标签: math operators bitwise-operators