4

我有以下代码:

print "\n1 & 11\n";
var_dump(1 & 11);

print "\n 2 & 222\n";
var_dump(2 & 222);

为什么第一个结果是 1 ?为什么第二个结果是 2?

PHP 网站说(2 & 222例如)应该给我一个布尔值:

例如,$a & $b == true评估等价然后按位与;while ($a & $b) == true先求位,再求等价。”

没看懂,怎么2 & 222可能2

4

3 回答 3

5

&按位做AND。也就是说,它对AND输入的所有位进行操作。

二进制:

2       = 0000000010
222     = 1011011110
2 & 222 = 0000000010 ( = 2)

不要&&&. &bitwise AND一会儿&&做一个logical AND

2 && 222 = true
2 &  222 = 2

至于1 & 11

1      = 0001
11     = 1011
1 & 11 = 0001 ( = 1)

所以,1 & 11 = 1

进一步阅读:

http://en.wikipedia.org/wiki/Binary_and#AND

http://en.wikipedia.org/wiki/AND_gate

于 2012-11-21T09:41:49.170 回答
3

位:

  1. 01
  2. 10
  3. 11

运算符返回两个数字中设置为 1的&所有位。所以:

  • 1 & 2 -> 01 & 10 -> 00 == 0
  • 2 & 3 -> 10 & 11 -> 10 == 2
于 2012-11-21T09:41:51.970 回答
0

单个&符号是按位与运算符。
您发布的报价告诉您在进行位运算和比较时应该注意运算符优先级。您可能会期望$a & $b == true测试是否在 $a 中设置了某些位,但它相当于

$a & (int)($b==true)

由于您没有混合位操作和比较,var_dump(1&11);因此var_dump(2 & 222);该注释不应该打扰您。
这是一个简单的按位操作,如https://en.wikipedia.org/wiki/Bitwise_operation#AND中所述

see also:
http://docs.php.net/language.operators.precedence
http://docs.php.net/language.types.type-juggling

于 2012-11-21T09:45:30.677 回答