【发布时间】:2020-04-11 03:31:06
【问题描述】:
在研究矩阵求幂时,我遇到了快速加倍和下面的实现。我有以下问题:
为什么 for 循环会从 31 向下迭代到 0?
条件句中用i屏蔽n的目的是什么?
private static BigInteger Fibonacci(int n) {
BigInteger a = BigInteger.Zero;
BigInteger b = BigInteger.One;
for (int i = 31; i >= 0; i--) {
BigInteger d = a * (b * 2 - a);
BigInteger e = a * a + b * b;
a = d;
b = e;
if ((((uint)n >> i) & 1) != 0) {
BigInteger c = a + b;
a = b;
b = c;
}
}
return a;
}
请链接任何可以帮助我深入理解该主题的参考资料或文献。
干杯!
【问题讨论】:
-
倒计时有时会更快,因为在大多数指令集中通常都有一个
branch not zero来保存比较。
标签: algorithm bit-manipulation fibonacci