0

这是代码:

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

这是 32 位平台上的输出:

4294967173

但在 64 位上:

18446744073709551493

如何使它相同?说,int(10)无符号

4

2 回答 2

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

或者

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

虽然如果您真的想查看限制为 32 位的负数的二进制补码无符号值,只需执行以下操作:

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

这将4294967173在所有系统上打印。

于 2009-09-28T12:53:09.813 回答
0

查看我对这个问题的回答以获得一些想法 - 简而言之,您可以检查 PHP_INT_SIZE 常量的值以在 64 位平台上执行不同的处理。

于 2009-09-28T13:06:19.473 回答