博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
求余运算转换为位运算
阅读量:3610 次
发布时间:2019-05-21

本文共 428 字,大约阅读时间需要 1 分钟。

因为求余运算要用到除法,除法是比较费时的。因此高性能的程序需要对求余进行转换。
如果被求余数是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...

转载地址:http://jwzkn.baihongyu.com/

你可能感兴趣的文章
k8s集群搭建
查看>>
自己的阿里云镜像加速器查找
查看>>
spring-cloud-eureka初体验
查看>>
spring-cloud-ribbon简单使用
查看>>
spring-cloud-feign的简单使用
查看>>
spring-cloud-hystrix简单使用
查看>>
docker批量删除镜像
查看>>
deeping操作系统修改已挂载卷名称
查看>>
设计模式之神奇的单例模式
查看>>
linux系统设置oracle开机自启
查看>>
数据库的五种索引类型
查看>>
设计模式之建造者模式
查看>>
设计模式之代理模式
查看>>
设计模式之门面模式
查看>>
设计模式之装饰器模式
查看>>
设计模式之享元模式
查看>>
设计模式之组合模式
查看>>
设计模式之委派模式
查看>>
设计模式之模板方法模式
查看>>
设计模式之策略模式
查看>>