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)會更好。
全站熱搜