对这样一个具体问题感到抱歉,但在查看以下用 Javascript 编写的算法时
function c(a) {
if (a < 2) return 2;
if (a > 4096) return 4096;
var b = a & (a - 1);
while (b > 0) {
a++;
b = a & (a - 1)
}
return a
}
我遇到了一个我不确定的声明。究竟var b = a & (a - 1);
是做什么的?我假设它将A分配给B,然后从B中减去1,但是,如果是这种情况,那么B不会永远达到0(或低于0)导致无限循环吗?这怎么行?
我问这个是因为我试图使算法适应 PHP,但碰壁了。它在 Javascript 中完美运行,所以我确定我不明白发生了什么。这是我在 PHP 中的尝试:
function c($a) {
if ($a < 2) return 2;
if ($a > 4096) return 4096;
$b = $a
$b = ($b - 1);
while ($b > 0) {
$a++;
$b = $a;
$b -= 1;
}
return $b;
}
我可以清楚地看到为什么它不起作用,但我不确定如何更改算法以使其起作用。或多或少,我知道我没有正确调整算法,因为我不明白它在 Javascript 中是如何工作的。
不管怎样,请帮助我!我并不特别希望有人为我解决我的问题,但正确方向的提示会非常棒。:(
非常感谢。