如果被求余数是2的整数次幂,可以用位运算来进行转换,从而得到比较高的效率。



例如求 n % 32 = ???



可以将其转换为  n & (32-1)     



或者  n - (n>>5)<<5


证明比较简单,只要把n表示为二进制即可一目了然。



这个转换用处之一就是位向量的实现。


如下:

enum {BITSPERWORD=32, SHIFT=5, MASK = 0x1F}; 

 
(i & MASK))
 

  void clr(int i)  { x[i>>SHIFT] &= ~(1<<(i & MASK)); } 

 

  bool test(int) { return x[i>>SHIFT] & (1<<(i & MASK)); }