答案 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
。