2012-07-16 23 views
9

综观其他开发人员编写一些代码的怪使用,我碰到这个来了。交替的颜色工作正常。交替表行样式位运算符

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

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

+1

这实际上是相当干净的方式来做这个操作。我喜欢。 – KingCronus 2012-07-16 10:42:55

回答

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将是错误的。

+0

感谢您的回答,这是有道理:) – psynnott 2012-07-16 10:36:41

4

它的工作原理是,如果数字是奇数,则第一位总是1;如果数量是偶数,则第一位总是0。

1 
10 
11 
100 
101 
110 
111 
etc. 

理论上位运算比模运算速度更快,但它可能是解释无论如何都会下降优化模操作位运算。

为什么其他开发人员使用它,我们只能猜测:出于习惯的,从什么地方复制粘贴,不知道模运算符,炫耀,希望优化...

+2

我基于模数与按位操作,模数稍快(0.035%),所以它几乎不重要,但仍然 - 稍快。可能是模运算符有一些优化,我真的不知道,但它看起来像模数和按位比较都是足够好的解决方案。不过,很好的答案,+1。 – 2012-07-16 10:30:57

+0

感谢您的回答 – psynnott 2012-07-16 10:36:21