以下是代码:
echo sprintf('%u',-123);
这是32位平台上的输出:
4294967173
但在64位:
18446744073709551493
如何使它相同?比如说,int(10)unsigned
答案 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位平台上执行不同的处理。