下面是代码:

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位平台执行不同的处理。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top