与运算代替模运算小记
2015-02-11 21:21
169 查看
等式
先抛出一个等式,X & (2n−12^n-1) == X % 2n2^n
右边式子,也就是模运算,最后的结果为[0, 2n−12^n-1],而左边的式子,也就是与运算,可以将X的高位清掉,最后剩下的是X的[0, n)位上面的数值,这个值当然也是∈\in[0, 2n−12^n-1],所以左右两边是相等的。
对比
模运算经常用来做哈希,利用上面的等式,我们完全可以使用与运算来代替模运算,好处,与运算要比模运算来得快;
限制,模数必须是2的次幂;
参考资料
http://ifeve.com/dissecting-disruptor-whats-so-special/http://mechanitis.blogspot.com/2011/06/dissecting-disruptor-whats-so-special.html
相关文章推荐
- Maximum Product of Word Lengths(与运算作比较,代替循环)
- 使用与运算符代替求余运算符的技巧
- Numpy 基本除法运算和模运算
- 巧妙的位运算及模运算
- C++线性运算库梳理及Win/Linux下编译小记
- 编程技术感想——用取模运算代替判断后得到的高效性
- Java算术运算和模运算
- japser report 使用三目运算代替if else
- 判断一天是一年的第几天(关系运算代替算术运算)
- 使用联结语法代替not运算的小技巧
- 单片机与嵌入式系统中C语言的位运算小记
- 学习小记-Flask Web (2) 尝试用MySQL代替SQLite
- & |运算小记
- 用BigDecimal代替double进行加减乘除的运算
- JAVA对于乘法除法和模运算的优化,是否需要转换成位运算
- 【16位汇编】neg+sbb算术运算代替逻辑跳转
- 特殊问题 用两位long long 代替大数运算
- Numpy 基本除法运算和模运算
- 小记: FILETIME和64位整型运算
- 位运算代替乘除法