看一下其他开发人员编写的一些代码,我发现了这个:
for($i=1; $i<=30; $i++)
{
if($i&1)
$color = '#fff';
else
$color = '#bbb';
}
此$ color变量稍后在代码中用于行背景颜色。交替的颜色很好。
如果我写这篇文章,我会使用模数运算符(%)而不是按位(&amp;)运算符。
为什么按位运算符在这种情况下有效?使用此方法而不是模数运算符是否有任何优势?
答案 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.
理论上,按位运算比模数运算更快,但是解释器可能会将模运算优化为按位运算。
为什么其他开发者使用它,我们只能猜测:出于习惯,从某处复制粘贴,不知道模数运算符,炫耀,想要优化......