关于与运算和取余之间的关系
2016-10-31 13:56
162 查看
本文章已收录于:
转载至http://blog.sina.com.cn/s/blog_417424300100ew8z.html
一个数和3进行与运算,就是对4取余.
解释:
和3进行与运算,是取该数2进制形式的最后2位的值,因为3的二进制形式是(假设该数用1个字节表示,多个字节也一样,这里为了讲述,暂举1个字节为例)00000011,最后两位和1进行与,则把该数最后2位的状态取出来(和1与的特性,不理解的话复习数字逻辑基础).如下推导:
随便举一个数255,其二进制形式是11111111,根据十进制和二进制之间的转换公式,有:
255 = 128 + 64 + 32 + 16 + 8 + 4 + 2 + 1
对其两边进行同时对4取余运算,即
255%4 = 128%4 + 64%4 + 32%4 + 16%4 + 8%4 + 4%4 + 2%4 + 1%4
(第8位) (第7位) (第6位) (第5位) (第4位) (第3位) (第2位) (第1位)
可见第4至第8位得到的结果都会是0,只有低3位待定,而这低3位中,低2位不论怎样对4取余都是其原来的值,因为他们肯定比4小,而第3位正好是二进制中表示十进制的4所在的位,十进制数对4取余取得的是最后剩下比4小的那一部分,那么也就是说某个数对4取余取得的就是这个数二进制形式的低2位,那么我们只要获得该数低2位值即可,那么按照数字逻辑中讲述的与运算的特性,我们只要用该数和3即00000011进行与运算即可
推理:明白如上道理,那么同理1个数和5进行与运算就是对6取余,和7进行与运算就是对8取余,依次类推。
但此种规律只适合对偶数取余,对奇数取余,如3,是要取得剩下的比3小的数,比3小的数在二进制形式上也是在低2位,但是低2位又能表示3,所以对3取余就不能简单地对低2位进行与操作.其他奇数也是如此.
相关文章推荐
- 关于与运算和取余之间的关系
- 关于与运算和取余之间的关系
- 关于Certificate、Provisioning Profile、App ID的介绍及其之间的关系
- 关于 interface 和 class 之间 inherit 关系的测试
- 关于camera calibration以后三维空间和二维图像之间的映射关系的讨论
- 关于Certificate、Provisioning Profile、App ID的介绍及其之间的关系
- 关于gcc、glibc和binutils模块之间的关系
- 关于gcc、glibc和binutils模块之间的关系
- 关于基类和派生类之间的关系
- 关于百度指数和实际搜索量之间关系的调查
- 关于line box,inline box,line-height,vertical-align之间的关系
- 关于I帧,P帧,B帧和NAL单元的联系。还有slice片和NAL与各帧之间的关系
- 关于动态存储器dram中rank,bank,device之间的关系
- 关于Rigidbody,Collider和CharacterController三者之间的关系和用法的总结
- 关于计算机中 二进制位(bit)、字节(Byte)、 千字节(KB)等之间的关系
- 关于类之间的五种关系 UML
- SQL 关于地图两个坐标点之间的距离运算
- 关于oracle 10g的bit数 跟 os的bit数 跟 硬件的bit数之间的支持关系
- 关于mongodb ,redis,memcache之间见不乱理还乱的关系和作用
- 关于Certificate、Provisioning Profile、App ID的介绍及其之间的关系