PHP在32位和64位平台上的无符号整数

发布于 2024-08-05 19:46:57 字数 226 浏览 4 评论 0原文

这是代码:

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

这是 32 位平台上的输出:

4294967173

但在 64 位平台上:

18446744073709551493

如何使其相同?比如说,int(10) unsigned

Here is the code:

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

And this is the output on 32 bit platform:

4294967173

but on 64 bit:

18446744073709551493

How to make it the same ?Say,the int(10) unsigned

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

Spring初心 2024-08-12 19:46:57
echo sprintf('-%u',abs(-123));

或者

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

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

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

这将在所有系统上打印 4294967173

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

or

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

Though if you actually want to see the two's complement unsigned value of a negative number restricted to 32 bits just do:

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

And that will print 4294967173 on all systems.

梦途 2024-08-12 19:46:57

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

Check out my answer to this question for some ideas - in a nutshell, you can check the value of the PHP_INT_SIZE constant to perform different processing on a 64bit platform.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文