这个代码块是如何工作的?

时间:2012-12-15 04:50:37

标签: php

我无法理解以下代码的工作原理。

$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等......如何运作?

5 个答案:

答案 0 :(得分:2)

这是bitwise and operator

  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

与十进制数字不同,二进制数字从右向左读取。当您查看表格时,您可以看到偶数和奇数二进制数分别以01结尾。以0结尾的二进制数字是偶数,而以1结尾的二进制数字是奇数。

&位运算符的作用基本上是从小数的二进制表示的最后一位开始,然后返回它。

如果我们取数字5(0101),那么我们可以用伪代码设置它:

if last bit in 0101 is 1 then
    number is odd
otherwise
    number is even

对于PHP代码,表达式($start & 1)返回10。在PHP type juggling中,将1变为true,将0变为false

答案 3 :(得分:0)

它循环9次,每次按位并且为1(也就是它和第二个二进制数字,以查看它是否是2的多个)并相应地打印

答案 4 :(得分:0)

&安培;是按位和运算符。在表达式中,它正在寻找两个值共有的分娩。

以下是PHP按位运算符用法的教程:http://www.w3resource.com/php/operators/bitwise-operators.php