综观其他开发人员编写一些代码的怪使用,我碰到这个来了。交替的颜色工作正常。交替表行样式位运算符
如果我写这个,我会使用模运算符(%)而不是按位运算符(&)。
为什么按位运算符在这种情况下工作?使用此方法而不是模数运算符有什么优势吗?
综观其他开发人员编写一些代码的怪使用,我碰到这个来了。交替的颜色工作正常。交替表行样式位运算符
如果我写这个,我会使用模运算符(%)而不是按位运算符(&)。
为什么按位运算符在这种情况下工作?使用此方法而不是模数运算符有什么优势吗?
&
运算符对数字进行按位比较。所以,如果你
$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
将是错误的。
感谢您的回答,这是有道理:) – psynnott 2012-07-16 10:36:41
它的工作原理是,如果数字是奇数,则第一位总是1;如果数量是偶数,则第一位总是0。
1
10
11
100
101
110
111
etc.
理论上位运算比模运算速度更快,但它可能是解释无论如何都会下降优化模操作位运算。
为什么其他开发人员使用它,我们只能猜测:出于习惯的,从什么地方复制粘贴,不知道模运算符,炫耀,希望优化...
我基于模数与按位操作,模数稍快(0.035%),所以它几乎不重要,但仍然 - 稍快。可能是模运算符有一些优化,我真的不知道,但它看起来像模数和按位比较都是足够好的解决方案。不过,很好的答案,+1。 – 2012-07-16 10:30:57
感谢您的回答 – psynnott 2012-07-16 10:36:21
这实际上是相当干净的方式来做这个操作。我喜欢。 – KingCronus 2012-07-16 10:42:55