定理:2^n表示2的n次方,也就是说,一个数对2^n取模 == 一个数和(2^n - 1)做按位与运算 。
假设n为3,则2^3 = 8,表示成2进制就是1000。2^3 -1 = 7 ,即0111。
此时X & (2^3 - 1) 就相当于取X的2进制的最后三位数。
从2进制角度来看,X / 8相当于 X >> 3,即把X右移3位,此时得到了X / 8的商,而被移掉的部分(后三位),则是X % 8,也就是余数。
转载自:http://www.hollischuang.com/archives/2091
根据个人理解,已知从右往左第i位代表的十进制是2^(i-1),该数二进制形式第n位及右边的位的和最大为2^n-1
如果对2的n次方取模(%),那么这部分数据由于小于2^(i-1)就是最后的余数了,其他位都是2的倍数可以忽略。