1

我正在阅读php_architects.zend.php_.5.certification.study.guide.2006并想玩位移位。我有 64 位的 Ubuntu。这是我的代码:

$x = 1;
echo ($x << 64) . "\n";
echo $x * pow(2, 64) . "\n";

这个脚本的输出是:

1
1.844674407371E+19

由于类型转换,第二个结果是浮点数,很明显。但对于第一个,我期望 0 值。

为什么我得到 1 而不是 0?

UPD 又 做了一项测试:

echo ($x << 67) . "\n";

Gives: 8 看起来像骑自行车,但我希望去除位。

4

1 回答 1

0

用简单的英语,您将 '1' 向左移动。

$x也是如此。0001_ $x << 1_ 0010当你这样做 64 次时,你就开始了0001

你只是在移动比特,从不移除,所以你永远不会得到零。

更多信息请访问http://php.net/manual/en/language.operators.bitwise.php

于 2013-07-09T12:41:19.077 回答