取余与位运算
来源:互联网 发布:傲飞数据整合工具 编辑:程序博客网 时间:2024/05/16 01:23
最近研究别人的代码,其中一段怎么也想不明白~后来按自己的意思写了一遍,发现自己用的是取余,别人用的是&位运算,后来估计取余可以用位运算来表示,网上一搜还真有,对比一下,原代码果然也是此意~
=====================================================================================================
下面转载自:http://hi.baidu.com/excalibur/item/6abb9e318d107db9623aff36
X % 2^n = X & (2^n - 1)
注:2^n表示2的n次方
解析:假设n为3,则2^3 = 8,表示成2进制就是1000
2^3 - 1 = 0111; 此时X & (2^3 - 1) 就相当于取X的2进制的最后三位数。
从2进制角度来看,X / 8相当于 X >> 3,即把X右移3位,此时得到了X / 8的商,而被移掉的部分(后三位),则是X % 8,也就是余数。
// Round up the number of bytes to write
// to a sector boundary.
dwNumBytesXfer = (dwNumBytesXfer + cs.dwPageSize - 1) & ~(cs.dwPageSize - 1);
上面的代码是要把dwNumBytesXfer取成比它本身大的,cs.dwPageSize的整数倍的一个数。
即:如果cs.dwPageSize是8,dwNumBytesXfer是31,那么dwNumBytesXfer 最终得到的是 4*8 = 32
页大小肯定是2的n次方。某数 & (cs.dwPageSize - 1) 就相当于整除cs.dwPageSize
- 取余与位运算
- 取余与位运算
- 取余与位运算
- 取余与位运算
- 位与运算与取余
- 位运算总结 取模 取余
- 位运算总结 取模 取余
- 位运算总结 取模 取余
- 位运算总结 取模 取余
- 取余与模运算
- 乘除取余转为位运算
- 《除法与取余运算符》
- 辨析取模运算与取余运算
- 取模运算与取余运算的区别
- 取余运算符
- Java取余运算
- 取余运算
- 取余运算
- url为onclick事件时报tree未定义解决方法
- Uva-Live 3905-Meteor
- Hudson安装、配置
- 自己动手写搜索引擎(常搜吧历程七#解析文档之WORD#)(Java、Lucene、hadoop)
- 开源工具-hostsPlus
- 取余与位运算
- structs2 工作原理
- Ubuntu12.10 安装ATI显卡驱动
- Apache Drill: 大数据集互动分析的分布式框架
- 一些DLL的运行机制
- Sina SAE & Android
- 常见图像处理库(fastVCV、openCV for Android)
- js定时器
- MyEclipse使用SVN时老是关闭