`
jgsj
  • 浏览: 960476 次
文章分类
社区版块
存档分类
最新评论

由最快判断整数奇偶法的联想(快速求余)

阅读更多

在传统上我们判断一个整数的奇偶性都是用模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)就是我们得到的快速求余的结论。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics