操作1539 | 0xfffff800在
JavaScript和Python 2.7中返回-509.
在PHP中我得到4294966787.
在PHP中我得到4294966787.
有谁知道为什么,可以向我解释.我很想知道如何在PHP中获得预期的结果.
解决方法
1539 | 0xfffff800 = 4294966787(= 0xFFFFFE03)
这是完全正确的.所以,PHP是对的.
这是完全正确的.所以,PHP是对的.
如果您希望同时具有正整数和负整数,则需要一些机制来确定该数字是否为负数.这通常使用数字的2补码来完成.你可以通过反转数字的所有位来否定一个数字,然后加1.为了避免歧义,您不能使用整数变量的所有位.在这种情况下,您不能使用最高位.最高位保留为符号位. (如果你不这样做,你永远不知道你的号码是一个大的正数还是一个负数.)
例如,使用8位整数变量,您将能够表示0到255之间的数字.如果需要有符号值,则可以表示从-128(1000 000二进制)到127(0111 1111)的数字.
在您的示例中,您有一个32位数字,其位设置最高.在Python和JavaScript中,它被解释为负数,因为它们显然具有32位变量,并且在那里,设置了最高位.他们将其解释为负数.所以,你的计算结果也是负面的.在您使用的PHP版本中,整数变量似乎是64位长,只使用低32位.最高位(位63)未设置,因此PHP将此数字解释为正数.根据您想要实现的目标,您可能希望将第32位到第63位的所有位填充为1,这将产生负数…