您的位置:首页 > 其它

求余运算转换为位运算

2015-11-30 18:17 357 查看
因为求余运算要用到除法,除法是比较费时的。因此高性能的程序需要对求余进行转换。

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

例如求 n % 32 = ???

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

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

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

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

如下:

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

void set(int i) { x[i>>SHIFT] |= (1<<(i & MASK)) ;}     //  这里用到了求余的转换,实际是i % 32   

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

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

to be continued...
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: