【问题标题】:bitwise operator in PHPPHP中的位运算符
【发布时间】:2012-11-09 12:37:12
【问题描述】:

我有以下代码:

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

【问题讨论】:

    标签: php bit-manipulation operator-keyword


    【解决方案1】:

    & 按位执行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

    【讨论】:

      【解决方案2】:

      位:

      1. 01
      2. 10
      3. 11

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

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

      【讨论】:

        【解决方案3】:

        单与号是按位与运算符。
        您发布的报价告诉您在进行位运算和比较时应该注意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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-01-27
          • 2011-07-29
          • 2010-12-31
          • 1970-01-01
          • 2011-01-09
          • 2017-09-15
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多