题
下面是代码:
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位平台执行不同的处理。
不隶属于 StackOverflow