1. 程式人生 > >Mod運算子(a%n)

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))將始終為正數。