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

psy*_*ott 9 php bit-manipulation operators

看一下另一位开发人员编写的代码,我遇到了这个问题:

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

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

如果我写这个,我会使用模数运算符(%)而不是按位(&)运算符.

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

Nib*_*Pig 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.