PHP中的交替表行样式 - 按位运算符的奇怪用法

时间:2012-07-16 10:16:35

标签: php operators bit-manipulation

看一下其他开发人员编写的一些代码,我发现了这个:

for($i=1; $i<=30; $i++)
{
  if($i&1)
    $color = '#fff';
  else
    $color = '#bbb';
}

此$ color变量稍后在代码中用于行背景颜色。交替的颜色很好。

如果我写这篇文章,我会使用模数运算符(%)而不是按位(&amp;)运算符。

为什么按位运算符在这种情况下有效?使用此方法而不是模数运算符是否有任何优势?

2 个答案:

答案 0 :(得分:9)

&运算符对数字进行逐位比较。所以,如果你这样做

$i & 1

然后它将告诉您是否设置了'1'标志,例如二进制:

001010111010

最后一个数字是'1'标志(记住,二进制以相反的顺序变为1,2,4,8等),在这种情况下设置为0.

因为1是二进制中唯一的奇数标志,它会告诉你这个数字是奇数还是偶数。

如果$ i例如3,那么二进制它将是011 - 最后一个数字是1(1标志),因此$i & 1将为真。

如果$ i为4,那么在二进制中它将为100 - 最后一个数字为0(1标志),因此$i & 1将为false。

答案 1 :(得分:4)

这是有效的,因为如果数字为奇数,则第一位始终为1,如果数字为偶数则为0。

  1
 10
 11
100
101
110
111
etc.

理论上,按位运算比模数运算更快,但是解释器可能会将模运算优化为按位运算。

为什么其他开发者使用它,我们只能猜测:出于习惯,从某处复制粘贴,不知道模数运算符,炫耀,想要优化......