PHP中的按位运算符

时间:2012-11-21 09:38:12

标签: php bit-manipulation operator-keyword

我有以下代码:

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

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

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

PHP Web site表示2 & 222(例如)应该给我一个布尔值:

  

例如, $ a& $ b == true 评估等价,然后按位和;而 ($ a& $ b)== true 评估按位然后等效。“

我没理解,2 & 222怎么可能2

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:3)

位:

  1. 01
  2. 10
  3. 11
  4. &运算符返回两个数字中设置为1的所有位。所以:

    • 1& 2 - > 01& 10 - > 00 == 0
    • 2& 3 - > 10& 11 - > 10 == 2

答案 2 :(得分:0)

单个&符号是按位和运算符 您发布的引用告诉您在进行位操作和比较时应该了解operator precedence。您可能期望$a & $b == true测试某些位是否设置在$ a中,但它等同于

$ a& (INT)($ B == TRUE)

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

所解释的那样

另见:
http://docs.php.net/language.operators.precedence
http://docs.php.net/language.types.type-juggling