PHP在32位和64位平台上的无符号整数

时间:2009-09-28 12:46:05

标签: integer unsigned

以下是代码:

echo sprintf('%u',-123);

这是32位平台上的输出:

4294967173

但在64位:

18446744073709551493

如何使它相同?比如说,int(10)unsigned

2 个答案:

答案 0 :(得分:3)

echo sprintf('-%u',abs(-123));

$n = -123;
echo sprintf("%s%u", $n < 0 ? "-":"", abs($n));

虽然如果你真的想看到限制为32位的负数的二进制补码无符号值,那就行了:

echo sprintf("%u", $n & 0xffffffff);

这将在所有系统上打印4294967173

答案 1 :(得分:0)

查看我对this question的回答,了解一些想法 - 简而言之,您可以检查PHP_INT_SIZE常量的值,以便在64位平台上执行不同的处理。