$a = 2;
$b = ($a<<6) & 0xFF;
var_dump($b);die;
代码如上 最后结果是 128 。
$a 二进制 左移6 位 相当于 $a * 2^6 (2的6次方)。
现在告诉你后边的 &0xFF 是什么鬼东西。这个东西的有无并不会影响计算结果,但严格意义上说应该有。
因为前边的位移运算是二进制算法,计算结果是一个二进制数据,byte类型的数字要&0xff再赋值给int类型,其本质原因就是想保持二进制补码的一致性。
$a = 2;
$b = ($a<<6) & 0xFF;
var_dump($b);die;
代码如上 最后结果是 128 。
$a 二进制 左移6 位 相当于 $a * 2^6 (2的6次方)。
现在告诉你后边的 &0xFF 是什么鬼东西。这个东西的有无并不会影响计算结果,但严格意义上说应该有。
因为前边的位移运算是二进制算法,计算结果是一个二进制数据,byte类型的数字要&0xff再赋值给int类型,其本质原因就是想保持二进制补码的一致性。