有人能解释一下为什么这等于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
。