Mod运算符(a%n)

性能问题

可以实现模运算,使得每次计算具有余数的除法。对于特殊情况,在某些硬件上,存在更快的替代方案。例如,2的幂的模可以替代地表示为按位 AND运算:

x % 2^n == x & (2^n - 1)

示例(假设x是正整数):

x % 2 == x & 1

x % 4 == x & 3

x % 8 == x & 7

在比模数更有效地实现按位运算的设备和软件中,这些替代形式可以导致更快的计算。

优化编译器可以识别表单的表达式(表达式%常量),其中常量是2的幂,并自动将它们实现为(表达式&(常量-1))。

这可以允许在不影响性能的情况下编写更清晰的代码。 除非被除数是无符号整数类型,否则对于模运算结果具有被除数符号(包括C)的语言,这种优化是不可能的。 这是因为,如果被除数为负数,则模数将为负数,而(表达式&(常数-1))将始终为正数。

猜你喜欢

转载自blog.csdn.net/weixin_40539125/article/details/85614070