PHP /按位运算符左移

时间:2016-07-31 20:37:03

标签: php bitwise-operators bit bit-shift

有人可以向我解释为什么这等于32

$a = 4 << 2 + 1;
echo $a;

输出:

  

32

我看了manual,发现<<还有一点转变,但仍然没有完全理解这个概念。

1 个答案:

答案 0 :(得分:3)

如果我们将问题分成几个步骤,就会很容易理解。我将首先解释按位部分,以便任何达到此问题的人都能明白这一点。最后,你可以看到你的问题。

开始:

$v = 4;

首先,我们检查该值需要多少位。

echo decbin($v); // 3 bits (100)

然后,我们把它换成两个:

echo $v << 2; // the value is now 16. Why?

因为如果我们检查位:

echo decbin($v << 2); // 5 bits (10000) -> the previous 3 bits + 2 shifted
//                                  /\ check that there are more 2 bits now

但是我们得到了32,为什么会这样?好吧,因为在这种情况下,+首先出现。它首先评估总和(2 + 1)然后才转移。您的代码与4 << (2 + 1)相同。

如果我们像以前一样检查步骤,但知道它将首先求和,它实际上将它拉扯3,使最后一个值改为6位。

如果我们将转移了3(100000)的值转换为32