PHP按位运算的意外结果

操作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将此数字解释为正数.根据您想要实现的目标,您可能希望将第32位到第63位的所有位填充为1,这将产生负数…

相关文章

文章浏览阅读8.4k次,点赞8次,收藏7次。SourceCodester Onl...
文章浏览阅读3.4k次,点赞46次,收藏51次。本文为大家介绍在...
文章浏览阅读1.1k次。- php是最优秀, 最原生的模板语言, 替代...
文章浏览阅读1.1k次,点赞18次,收藏15次。整理K8s网络相关笔...
文章浏览阅读1.2k次,点赞22次,收藏19次。此网络模型提供了...
文章浏览阅读1.1k次,点赞14次,收藏19次。当我们谈论网络安...