gpt4 book ai didi

php - PHP 按位运算的意外结果

转载 作者:可可西里 更新时间:2023-10-31 23:40:01 27 4
gpt4 key购买 nike

操作 1539 | 0xfffff800 在 JavaScript 和 Python 2.7 中返回 -509。在 PHP 中,我得到 4294966787

有谁知道为什么并可以向我解释一下。我也很想知道如何在 PHP 中获得预期的结果。

最佳答案

1539 | 0xfffff800 = 4294966787 (= 0xFFFFFE03)这是完全正确的。所以,PHP 是对的。

如果您希望同时拥有正整数和负整数,则需要某种机制来确定数字是否为负数。这通常使用数字的 2 补码来完成。您可以通过反转数字的所有位然后将其加 1 来取反数字。为了避免歧义,您不能使用整型变量的所有位。在这种情况下,您不能使用最高位。最高位保留为符号位。 (如果你不这样做,你永远不知道你的数字是一个大的正数还是一个负数。)

例如,对于 8 位整数变量,您可以表示从 0 到 255 的数字。如果您需要带符号的值,您可以表示从 -128(二进制 1000 000)到 +127(0111 1111)的数字。

在您的示例中,您有一个设置了最高位的 32 位数。在 Python 和 JavaScript 中,它被解释为负数,因为它们显然有 32 位变量,并且设置了最高位。他们将其解释为负数。所以,你的计算结果也是负的。在您使用的 PHP 版本中,整数变量似乎是 64 位长,并且只使用了低 32 位。最高位(第 63 位)未设置,因此 PHP 将此数字解释为正数。根据您想要实现的目标,您可能希望用 1 填充从第 32 位到第 63 位的所有位,这将产生一个负数...

关于php - PHP 按位运算的意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28305675/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com