这是代码:
echo sprintf('%u',-123);
这是 32 位平台上的输出:
4294967173
但在 64 位上:
18446744073709551493
如何使它相同?说,int(10)无符号
echo sprintf('-%u',abs(-123));
或者
$n = -123;
echo sprintf("%s%u", $n < 0 ? "-":"", abs($n));
虽然如果您真的想查看限制为 32 位的负数的二进制补码无符号值,只需执行以下操作:
echo sprintf("%u", $n & 0xffffffff);
这将4294967173
在所有系统上打印。
查看我对这个问题的回答以获得一些想法 - 简而言之,您可以检查 PHP_INT_SIZE 常量的值以在 64 位平台上执行不同的处理。