PHP/位运算符左移


PHP / bitwise operators left shift

有人能解释一下为什么这等于32吗?

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

输出:

32

我看了手册,发现<<有点左移,但仍然没有完全理解这个概念。

如果我们将问题分为几个步骤,就很容易理解。我将首先解释比特部分,以便任何人都能理解这个问题。最后你可以看到你的问题被提及。


开始:

$v = 4;

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

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

然后,我们左移2:

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