&作为PHP中的算术运算符

Jer*_*026 2 php math

可能重复:
参考 - 这个符号在PHP中意味着什么?

我正在处理一些遗留代码,我遇到了以下函数:

function is_odd($number) {
   return $number & 1; // 0 = even, 1 = odd
}
Run Code Online (Sandbox Code Playgroud)

我从来没有见过一种方法来检查一个数字是否像以前那样奇怪地编写,而我只是想了解它们实际上在做什么.

rek*_*o_t 7

&它是一个按位 - 并且它基本上工作,以便对于1两个操作数中的每个位,它产生1结果值和0所有其他位.如果将任何数字转换为其位表示,您很快就会发现它是确定数字是偶数还是奇数的最低位,例如:

   5 = 101
  10 = 1010
  13 = 1101
1030 = 10000000110
Run Code Online (Sandbox Code Playgroud)

最低位(最右边的位,也称为最低有效位)对于每个奇数都是1,对于每个偶数都是0.对于每一位而不是最低位,执行操作$n & 1总是会产生0(因为数字1只有一位,你可以想象其余的位用0填充左边以匹配另一个操作数的长度).所以基本上操作归结为比较操作数的最低位,并且1 & 1是1,所有其他组合都是0.所以基本上当$n & 1产量1时,它意味着数字是奇数,否则它是偶数.

编辑.

下面是一些示例,用于演示按位 - 并且对于我之前给出的示例值有效,括号中的数字是原始十进制数:

  101 (5)
& 001 (1)
  ---
  001 (1) = true


  1010 (10)
& 0001 (1)
  ----
  0000 (0) = false


  1101 (13)
& 0001 (1)
  ----
  0001 (1) = true


  10000000110 (1030)
& 00000000001 (1)
  -----------
  00000000000 (0) = false
Run Code Online (Sandbox Code Playgroud)

由此可以很容易地看出,当两个操作数的最右边位为1时,结果才为真.