前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用位运算替代模运算

使用位运算替代模运算

作者头像
我是攻城师
发布2018-05-14 17:44:29
1.9K3
发布2018-05-14 17:44:29
举报
文章被收录于专栏:我是攻城师

昨天的分析HashMap原理的文章里面提到,使用位运算替代取模运算效率高,但位运算只能在特定场景下才能替代%运算。

正常情况下:

但如果b的值为2的n次方的时候(n为自然数),这时候就可以用位运算来替代模运算, 转化如下:

2的n次方的二进制如下:

从上面能看到左移一位是放大2倍,右移一位是缩小2倍

分别减一后的二进制

举例

我们算下11%8的模,

11的二进制是:1011

代入上面的公式:

7的二进制: 0111

二者做&(与)运算 ,回忆下运算规则:

结果:

1011 & 0111 = 0011

转化成10进制后=3

所以11%8=3

这种方法只是适合于求一个数除以二的N次冥才正确,求模的过程,就是2^n-1的中1的个数就是n的值,再与a做&运算,得出来的低位就是我们期望的余数。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-01-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 我是攻城师 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档