我正在处理一些遗留代码,我遇到了以下函数:
function is_odd($number) {
return $number & 1; // 0 = even, 1 = odd
}
我从来没有见过一种方法来检查一个数字是否像以前那样奇怪地写,并且只是想了解它们实际上在做什么。
答案 0 :(得分:7)
&
是bitwise-and,它基本上有效,因此对于两个操作数中1
的每个位,它会在结果值中生成1
并{{1对于所有其他位。如果将任何数字转换为其位表示,您很快就会发现它是确定数字是偶数还是奇数的最低位,例如:
0
最低位(最右边的位,也称为最低有效位)对于每个奇数都是1,对于每个偶数都是0。对于除最低位之外的每一位,执行 5 = 101
10 = 1010
13 = 1101
1030 = 10000000110
总是会产生$n & 1
(因为数字1只有一位,你可以想象其余的位用0填充左边以匹配另一个操作数的长度)。所以基本上操作归结为比较操作数的最低位,0
是1,所有其他组合都是0.所以基本上当1 & 1
得1时,这意味着数字是奇数,否则它甚至都是。
修改强>
以下是一些示例,用于演示我之前给出的示例值的按位和工作方式,括号中的数字是原始十进制数字:
$n & 1
由此可以很容易地看出,当两个操作数的最右边的位都是1时,结果才为真。