通过位运算(不用模运算符%)求余
模运算 大家都知道就是求余,比如9/8,它的余数就是1,通过9%8可以快捷的求出余数.
但是这里我为大家介绍一种不通过求模运算符%来求余数的方法.但是他有一个前提,a/b的除数b必必须为2的n次方.也就是说除数b必须是
2的一次方1
2的二次方4
2的三次方8
……
……
只有是这样的一种情况,这种方法才是正确的.下来我为大家介绍这种实现,有两种方法.首先为大家介绍一个公式,这是比较好运用的一种.
我们默认除数的8,也就是2的三次方,公式是这样的 a&(8-1)
现在,我们可以来算一下.默认值a=9,b=8.小括号的内的值为8-1=7.
9的二进制表现:1001
7的二进制表现:0111
9&8的结果值 :0001=1
也就是说,余数为1,结果是正确的.
为了证实这个公式的真是可靠,我们可以a=14,继续晕算一次.
14的二进制表现:1110
7的二进制表现 :0111
9&8的结果值 :0110=6
显而易见,结果也是正确的,大家再缓缓a和b的值来证实一下!
另外一种方式是通过位移运算符来计算.初始值还是a=9,b=8.
a-((a>>3)<<3)先右移3位,再左移三位,然后a减去移位后的值.
大家可能要问,为什么是3位呢,因为b是8的,2的3次方是8,所以是移动三位.
好了,两种方式已经介绍清楚了,有什么问题欢迎留言,谢谢!^_^