例:
37 % 8 =5
37 & 7 = 5
第一种是正常取余数,第二种是用&取余数
也就是
x%(2 ^ n) = x&(2^n -1);
要求被除数必须是2的指数,也就是 2、4、8、16、31、。。。
从2进制角度来看,X / 8相当于 X >> 3,即把X右移3位,此时得到了X / 8的商,而被移掉的部分(后三位),则是X % 8,也就是余数;
假设x 为10 则 二进制表示为 1010
假设被除数为8,也就是2的3次方
10 除以 8 相当于 1010 >> 3 ,也就是右移三位,而被移出去的就是10除以8的余数。
已知被除数8为2的指数,2的指数用二进制表示都为只有第一次为1,后面位都为0,则将指数减1,二进制表示就变成比原来少一位,但所有位上都为1
再来看&运算,这种运算为 1&0 = 0,1&1=1
那10 % 8 用二进制示例如下
1010
&
0111
--------------
0010 ---> 2,也就是10%8的结果
这种运算方式,只能用在被除数为2的指数的时候才可使用生效。