0

我无法理解以下代码是如何工作的。

$start = 1;
while($start<10){
    if ($start&1) {
      echo "ODD  ".$start." <br/> ";
    }
    else {
      echo "EVEN  ".$start." <br/> ";
    }
    $start++;
}

$start&1分别返回 ODD 和 EVEN。

输出

ODD 1
EVEN 2
ODD 3
EVEN 4
ODD 5
EVEN 6
ODD 7
EVEN 8
ODD 9 

如果我们给出$start&2而不是$start&1,它会以另一个顺序返回。

&1 &2等等...如何在这里工作?

4

5 回答 5

2

它是按位和运算符

  0001 --> 1
& 0001
  ----
  0001 --> 1

  0010 --> 2
& 0001
  ----
  0000 --> 0

  0011 --> 3
& 0001
  ----
  0001 --> 1

根据字节顺序,最左边或最右边的位在此检查中很重要。以上是与 1 的 &ing。在您的第二个示例中,与 2 的 &ing 将是

  0001 --> 1
& 0010
  ----
  0000 --> 0

  0010 --> 2
& 0010
  ----
  0010 --> 2

  0011 --> 3
& 0010
  ----
  0010 --> 2

为了进一步比较,这里是 1-3 &ing 与 3

  0001 --> 1
& 0011
  ----
  0001 --> 1

  0010 --> 2
& 0011
  ----
  0010 --> 2

  0011 --> 3
& 0011
  ----
  0011 --> 3

要查看发生了什么,请按照两个数字的列向下移动。如果它们都是 1,则结果将该位置的位设置为 1。如果其中任何一个为 0,则结​​果在该位置为 0。所以对于 2 & 3 ..

  0010 --> 2
& 0011
  ----
  0010
  ||||
  |||+- 0 and 1, so 0
  ||+-- 1 and 1, so 1
  ++--- 0 and 0, so 0

  0010 == 2
于 2012-12-15T04:52:54.207 回答
2

此代码基于&运算符(AND 按位运算符):
$start&1如果最右边的位为 1 => 数字为奇数,则返回 true

例如,5(odd) 的二进制表示为:

101

1

001

所以101 & 001将返回001它也在truePHP 中。

于 2012-12-15T04:53:46.730 回答
1

位运算符&处理。在计算机上,数字存储为二进制数据(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)返回10。在PHP中,类型杂耍变成1,true和.0false

于 2012-12-15T05:31:29.193 回答
0

它循环 9 次,每次它与 1 逐位与(即与第二个二进制数字与以查看它是否是 2 的复数)并相应地打印

于 2012-12-15T04:54:02.857 回答
0

& 是按位与运算符。在表达式中,它正在寻找这两个值共有的出生数。

下面是 PHP 位运算符使用教程:http ://www.w3resource.com/php/operators/bitwise-operators.php

于 2012-12-15T04:59:13.133 回答