在传统上我们判断一个整数的奇偶性都是用模2的方法。此方法准确无误,但不是最快的方法。现在我们讨论整数的二进制存法。
假设一个数a,它由8个二进制来存储。如下:
a=a0a1a2a3a4a5a6a7;
a=2^7*a0+2^6*a1+2^5*a2+2^4*a3+2^3*a4+2^2*a5+2*a6+a7;
我们很容易的发现2^n都是2的倍数。
在对a求模时只剩下a7了,而判断整数的奇偶性我们只需要得到a7这个数就行了。
所以有a%2=a&1.
为运算要比模2运算快得多。
接下来我们讨论求一些特殊数的余数的快速方法。
继续看用二进制表示a的方法:
a=a0a1a2a3a4a5a6a7;
a=2^7*a0+2^6*a1+2^5*a2+2^4*a3+2^3*a4+2^2*a5+2*a6+a7;
我们也很容易的发现2^n*an是2^m*am(m<n,an,am的取值位0,1)的倍数,所以我们想到求2^m的余数只需要保住二进制中
0--m-1的二进制位。在位与运算中?|0=0,?|1=?(?表示未定数)。
综上我们可以得到快速求余的方法:
a%2^n=a&(2^n-1) -----(1);
式(1)就是我们得到的快速求余的结论。