这是一个简单的程序,可以找出整数是4的幂,但是当我们取整数255&时,我无法理解这一部分。 256:
$x = $n;
while ($x % 4 == 0) {
$x /= 4;
}
if($x == 1)
有人可以向我解释一下吗?
<?php
function is_Power_of_four($n)
{
$x = $n;
while ($x % 4 == 0) {
$x /= 4;
}
if($x == 1)
{
return "$n is power of 4";
}
else
{
return "$n is not power of 4";
}
}
print_r(is_Power_of_four(4)."\n");
print_r(is_Power_of_four(255)."\n");
print_r(is_Power_of_four(256)."\n");
?>
答案 0 :(得分:1)
它是C语言等老语言的惯用语。
大于1且2的幂的x
将具有二进制表示1 0 ...
,其中...
是任意数量的零。
一个小于2的幂的数字(例如x - 1
)将具有二进制表示1 ...
,其中...
是任意数量的1。此外,它将比x
少一个二进制数字。同样显而易见的是,从2的幂减去一个翻转该原始数字中的所有位:没有其他数字具有此属性。
&
是按位AND运算符。参考http://php.net/manual/en/language.operators.bitwise.php
因此x & (x - 1)
当且仅当x
的精确幂为2时才为0。