win和linux的php异或运算结果不同

作者:matrix 被围观: 3,898 次 发布时间:2015-06-17 分类:兼容并蓄 零零星星 | 3 条评论 »

这是一个创建于 3230 天前的主题,其中的信息可能已经有所发展或是发生改变。

一个获取key的函数(模拟js的php代码)在本地测试成功,而在服务器上失败。
逐行die()之后发现问题在于$b ^=4294967295;之前获取的$b都没问题,可到了这里就结果完全不一样。

win

<?php
$a = -38622 72608;
$b = 471468;
$c = $a ^ $b;
echo $c;
//Q1:
//本地这是5.2.14的php,Win,显示432886796;
//服务器上5.2.14的php,linux,显示-3862080500;
//Q2:如果将^ 换成xor
//本地显示-3862272608
//服务器显示-3862272608
?>

真是狗日的xor仙人板板。为什么换成xor结果和^又不同。
难道xor不是异或。。。 😕

Q1:幸好我不是第一个发现。算是有答案:
php中一个整数能表示的范围是2147483647~-2147483647
在linux环境下,php整数溢出的时候,其结果是不可靠
php提供了GMP库进行精确计算大数据
如果你的php开启了GMP:gmp_xor()进行xor运算

Q2:无解
将^ 换成xor运算win和linux的结果都一样。但是为毛线它又和^的结果不同。。。
应该也是整数溢出吧。。。懒得想了

参考:
php异或运算的不可靠性
http://php.net/manual/zh/ref.gmp.php
http://bbs.csdn.net/topics/390566090

其他文章:
本文固定链接:https://www.hhtjim.com/the-windows-and-linux-php-different-results-of-an-exclusive-or-operation.html
matrix
本文章由 matrix 于2015年06月17日发布在兼容并蓄, 零零星星分类下,目前没有通告,你可以至底部留下评论。
转载请注明:win和linux的php异或运算结果不同-HHTjim'S 部落格
关键字:, ,

有3 条评论 »

  1. 秦皇岛婚纱摄影排名 秦皇岛婚纱摄影排名 2015-7-4 16:45:19 +0800#2

    支持你一下

  2. 92af论坛 92af论坛 2015-6-30 13:09:16 +0800#1

    linux运行PHP比WIN好。

    • Matrix Matrix Moderator 2015-6-30 22:02:47 +0800

      确实 linux做服务器好得多

添加新评论 »

 🙈 😱 😂 😛 😭 😳 😀 😆 👿 😉 😯 😮 😕 😎 😐 😥 😡 😈 💡

插入图片

NOTICE: You should type some Chinese word (like “你好”) in your comment to pass the spam-check, thanks for your patience!