为什么64次位移不会给我0?

时间:2013-07-09 12:31:02

标签: php 64-bit bit-shift

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

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

此脚本的输出为:

1
1.844674407371E+19

第二个结果是由于类型转换而浮动,很清楚。但对于第一个我会期望0值。

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

UPD 做了一个测试:

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

给出: 8 看起来像骑自行车,但我希望有点去除。

1 个答案:

答案 0 :(得分:0)

用简单的英语,你将'1'移到左边。

因此$x0001$x << 10010。当你这样做64次时,你就开始了0001

你只是移动这些位,从不移除,所以你永远不会得到零。

http://php.net/manual/en/language.operators.bitwise.php

的更多信息