close

% 在C當中為取餘數(Mod)

Ex:

5 % 2 = 1

12 % 4 = 0

12 % 8 = 4

取餘數和除法相當類似,其執行速度也比較差(相較於位元運算、加減法、乘法)

有一個特例可以讓我們用位元運算來得到和取餘數相同的結果。

如果除數為2^N的話,則可以使用 & (2^N - 1)來取代。

Ex:

5 % 2 = 1        => 5 & 1 = 1

12 % 4 = 0      => 12 & 3 = 0

12 % 8 = 4      => 12 & 7 = 4

 

我們把(2^N - 1)用2進位來表示

1 => 0001

3 => 0011

7 => 0111

可以發現,如果一個數字X和(2^N - 1) 取 & 運算時,

其X的第N個bit以上會被去除,第N - 1個bit以下會被保留。

這樣的特性不就剛好和取餘數的性質相同嗎!

 

因此如果真的有需要用到取餘數的話,除數又可以為2^N的時候,改為 & (2^N - 1)會更好。

全站熱搜
創作者介紹
創作者 kgsprogrammer 的頭像
kgsprogrammer

太陽系後援會

發表在 痞客邦 留言(1) 人氣()