PHP5.2和PHP5.3中大整数的位运算

PHP5.2和PHP5.3中大整数的位运算,php,bit-manipulation,64-bit,biginteger,Php,Bit Manipulation,64 Bit,Biginteger,我将省略我是如何做到这一点的细节,但重点是下面的代码在PHP5.2x86和PHP5.3x86上产生了不同的结果 当PHP遇到一个不适合PHP_INT_MAX(x86上为32位)的数字时: 如果PHP遇到超出整数类型边界的数字,则 将被解释为浮动。还有,一个操作 结果将返回超出整数类型边界的数字 而是一个浮子 此外,他说: 更改浮点行为以一致使用双精度 在所有平台和所有编译器上。(克里斯蒂安·塞勒) 虽然我不能百分之百地证实这就是你所看到的一切的原因,但我想这应该与此有关 无论如何,如果你在处理这

我将省略我是如何做到这一点的细节,但重点是下面的代码在PHP5.2x86和PHP5.3x86上产生了不同的结果


当PHP遇到一个不适合PHP_INT_MAX(x86上为32位)的数字时:

如果PHP遇到超出整数类型边界的数字,则 将被解释为浮动。还有,一个操作 结果将返回超出整数类型边界的数字 而是一个浮子

此外,他说:

更改浮点行为以一致使用双精度 在所有平台和所有编译器上。(克里斯蒂安·塞勒)

虽然我不能百分之百地证实这就是你所看到的一切的原因,但我想这应该与此有关


无论如何,如果你在处理这些大数字,你应该停止依赖浮点精度,而是使用一个提供大数字支持的扩展,例如或

+1:数字
3402727701
4148612726
超过32位有符号整数表示。使用浮点或双精度进行异或运算不太可能是预期的。实际上这不是我自己的代码,这是PEAR包,我有一个问题,在升级到PHP5.3后,在PHP5.2上加密的数据变得无效。我使用的是最新的稳定版本1.0.1,像这样的问题似乎在以后的版本中得到解决。但是,即使我升级了库,现有的加密数据仍然与正确的实现不兼容。
Platform: Linux Test1 3.2.0-25-generic #40-Ubuntu SMP Wed May 23 20:30:51 UTC 2012 x86_64
PHP version: 5.3.10-1ubuntu3.2
Max integer: 9223372036854775807
Result: -1511693242
Platform: Linux Test2 2.6.32-5-686 #1 SMP Sun May 6 04:01:19 UTC 2012 i686
PHP version: 5.3.3-7+squeeze9
Max integer: 2147483647
Result: -1511693242
Platform: Windows NT Test3 6.1 build 7600 i586
PHP version: 5.3.6
Max integer: 2147483647
Result: -1511693242
Platform: Linux Test4 2.6.18-8.el5 #1 SMP Thu Mar 15 19:57:35 EDT 2007 i686
PHP version: 5.2.10
Max integer: 2147483647
Result: -1868155656