加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP按位运算的意外结果

发布时间:2020-12-13 22:54:33 所属栏目:PHP教程 来源:网络整理
导读:操作1539 | 0xfffff800在 JavaScript和Python 2.7中返回-509. 在PHP中我得到4294966787. 有谁知道为什么,可以向我解释.我很想知道如何在PHP中获得预期的结果. 解决方法 1539 | 0xfffff800 = 4294966787(= 0xFFFFFE03) 这是完全正确的.所以,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,这将产生负数…

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读