【发布时间】:2014-02-02 14:56:02
【问题描述】:
我正在尝试在本地机器和服务器上使用按位右移。结果是不同的。我在两个 PHP 上都使用了这个测试:
$sourceInt = 1391343920825;
$resultInt = $sourceInt >> 3;
$resultInt32 = $resultInt & 0xffffffff; // Here I'm trying to cut all bits older than 32
echo "TEST:<br>";
echo "x64: " . $resultInt;
echo "<br>x32: " . $resultInt32;
$binSource = unpack ( "C*", pack ( "L", $sourceInt ) );
$binInt = unpack ( "C*", pack ( "L", $resultInt ) );
$binInt32 = unpack ( "C*", pack ( "L", $resultInt32 ) );
echo "<br>Binaries:<br>Source bin: ";
var_dump ( $binSource );
echo "<br>x64 bin: ";
var_dump ( $binInt );
echo "<br>x32 bin: ";
var_dump ( $binInt32 );
我在本地机器上拥有的东西(PHP 5.3 x32):
TEST:
x64: -28185385
x32: -28185385
Binaries:
Source bin: array(4) { [1]=> int(185) [2]=> int(102) [3]=> int(143) [4]=> int(242) }
x64 bin: array(4) { [1]=> int(215) [2]=> int(236) [3]=> int(81) [4]=> int(254) }
x32 bin: array(4) { [1]=> int(215) [2]=> int(236) [3]=> int(81) [4]=> int(254) }
在服务器上(PHP 5.3 x64):
TEST:
x64: 173917990103
x32: 2119298263
Binaries:
Source bin: array(4) { [1]=> int(185) [2]=> int(102) [3]=> int(143) [4]=> int(242) }
x64 bin: array(4) { [1]=> int(215) [2]=> int(236) [3]=> int(81) [4]=> int(126) }
x32 bin: array(4) { [1]=> int(215) [2]=> int(236) [3]=> int(81) [4]=> int(126) }
你们怎么了?我不知道。
附:看来服务器也是 x32 的,因为 Integer 只存储在 4 个字节而不是 8 个字节中。
【问题讨论】:
标签: php