Igo*_*gor 0 c++ performance modulo micro-optimization bitwise-and
在C++命令中是真的吗?
n&1
更快,使用更少的内存
n%2?
(其中n是int类型)
更全局,有没有办法比使用%运算符更快地找到模2的整数残差?提前致谢.
哪个使用更多或更少的内存高度依赖于指令编码,但n & 1如果编译器没有针对n % 2相同的事情进行优化,则可以快许多倍[1] .当然,许多编译器确实会进行这种优化(或者可以做同样的事情但是应对具有有趣影响的负数%,&而不需要"关注").
请注意,根据您想要实现的目标,负数将需要特殊处理才& 1可以使用.如果流汗1从-1 & 1细,然后用&的确是一个有效的选择,但在数学上有点不可思议.
另请注意,总是在比较性能时,您需要进行自己的基准测量[或者很好地理解特定编译器为特定处理器模型生成的内容],您不能总是依赖于您在互联网上阅读的内容 - 包括我的帖子.
[1]作为比较,大多数现代处理器在单个时钟周期中执行AND,并且通常可以并行执行多个这样的操作.用于余数的整数除法肯定不是那么快.我碰巧从2012年1月开始为"家庭15"处理器提供AMD优化指南.采用"余数"作为答案的32位除法运算最多可能需要39个时钟周期.因此,假设编译器不会优化%成一个AND指令,它大约是40-80倍更糟使用%比&-假设当然是一个有效的优化.