我无法理解以下代码的工作原理。
$start = 1;
while($start<10){
if ($start&1) {
echo "ODD ".$start." <br/> ";
}
else {
echo "EVEN ".$start." <br/> ";
}
$start++;
}
$start&1
将返回ODD并且单独返回。
输出
ODD 1
EVEN 2
ODD 3
EVEN 4
ODD 5
EVEN 6
ODD 7
EVEN 8
ODD 9
如果我们提供$start&2
而不是$start&1
,则会返回另一个订单。
&1
&2
等......如何运作?
答案 0 :(得分:2)
0001 --> 1
& 0001
----
0001 --> 1
0010 --> 2
& 0001
----
0000 --> 0
0011 --> 3
& 0001
----
0001 --> 1
根据字节顺序,它将是此检查中最左侧或最右侧的位。以上是1和1.在你的第二个例子中,&amp; ing 2,这将是
0001 --> 1
& 0010
----
0000 --> 0
0010 --> 2
& 0010
----
0010 --> 2
0011 --> 3
& 0010
----
0010 --> 2
为了进一步比较,这里是1-3&amp; ing with 3
0001 --> 1
& 0011
----
0001 --> 1
0010 --> 2
& 0011
----
0010 --> 2
0011 --> 3
& 0011
----
0011 --> 3
要查看发生了什么,请按下两个数字的列。如果它们都是1,则结果将该位置设置为1.如果其中一个为0,则结果在该位置为0。所以2&amp; 3 ..
0010 --> 2
& 0011
----
0010
||||
|||+- 0 and 1, so 0
||+-- 1 and 1, so 1
++--- 0 and 0, so 0
0010 == 2
答案 1 :(得分:2)
此代码基于&
运算符(AND
bitwise运算符):
如果最右边的位为1 =&gt; $start&1
将返回true数字是奇数
例如,5
(奇数)的二进制表示为:
101
和1
:
001
因此101 & 001
将返回001
,这也是PHP中的true
。
答案 2 :(得分:1)
按位运算符&
处理bits。在计算机上,数字存储为二进制数据(1和0,也称为“位”)。这是循环中使用的数字表。
1 = 0001
2 = 0010
3 = 0011
4 = 0100
5 = 0101
6 = 0110
7 = 0111
8 = 1000
9 = 1001
与十进制数字不同,二进制数字从右向左读取。当您查看表格时,您可以看到偶数和奇数二进制数分别以0
和1
结尾。以0
结尾的二进制数字是偶数,而以1
结尾的二进制数字是奇数。
&
位运算符的作用基本上是从小数的二进制表示的最后一位开始,然后返回它。
如果我们取数字5(0101
),那么我们可以用伪代码设置它:
if last bit in 0101 is 1 then
number is odd
otherwise
number is even
对于PHP代码,表达式($start & 1)
返回1
或0
。在PHP type juggling中,将1
变为true
,将0
变为false
。
答案 3 :(得分:0)
它循环9次,每次按位并且为1(也就是它和第二个二进制数字,以查看它是否是2的多个)并相应地打印
答案 4 :(得分:0)
&安培;是按位和运算符。在表达式中,它正在寻找两个值共有的分娩。
以下是PHP按位运算符用法的教程:http://www.w3resource.com/php/operators/bitwise-operators.php