Xpoint
   [напомнить пароль]

XoR дает неверный результат

Метки: [без меток]
2009-07-20 19:21:15 [обр] 02077461[досье]

Добрый день. Столкнулся с проблемой: xor на PHP и JS возвращают разные результаты:
JS: 43814 ^ -4738698913 = -443704711 # <-- этот правильный
PHP: 43814 ^ -4738698913 = -2147439834 # <-- неправильно
("php -r 'echo 43814 ^ -4738698913;' ", "alert(43814 ^ -4738698913);")

Причем на некоторых машинах работает корректно. Не работает на OpenSUSE 11.1, Ubuntu 9.04, на XP работает через одну.
Даже расширение GMP (http://us3.php.net/manual/en/ref.gmp.php) не помогает решить проблему.
Может кто-нибудь подсказать, как можно решить данную проблему?
Очень надеюсь, что эта проблема не связанна с ОС или железом.

спустя 3 часа 17 минут [обр] Lynn «Кофеман»(98/571)[досье]
Ставлю пять копеек, что машины на которых работает правильно 64-битные.
спустя 1 час 58 минут [обр] Dennis F. Latypoff aka funky_dennis(4/78)[досье]
denis@denis-laptop:~$ uname -a
Linux denis-laptop 2.6.28-14-generic #46-Ubuntu SMP Wed Jul 8 07:21:34 UTC 2009 i686 GNU/Linux

denis@denis-laptop:~$ cat ttt.c 
#include <stdio.h>

int
main (void)
{
   printf ("%lld\n", 43814LL ^ -4738698913LL);
   return 0;
}

denis@denis-laptop:~$ gcc -g -O2 ttt.c 

denis@denis-laptop:~$ ./a.out 
-4738672007
:)
спустя 8 часов [обр] Филипп Ткачев(20/112)[досье]

WinXP SP3, Intel Core 2 Duo E6550, FFx3.5.1, IE 6, Opera 9.62, Google Chrome 0.2.149.30

<?php

$a = 43814 ;
$b = -4738698913;
echo $a ^ $b;

?>

<script language="javascript">

   var a = 43814 ;
   var b = -4738698913;
   var c = a ^ b;
   
   alert(c)
   
</script>

Результат всюду одинаков: -443704711

спустя 2 дня 17 часов [обр] 02077461[досье]
Lynn «Кофеман»[досье], как бы и моя машина 64 битная. Собственно вопрос закрыт, но решения нет, кому интересно могут посмотреть на багтреккере php.net
Да, связанно с разрядностью системы и преобразованием целого числа к флоату (так уж устроен РНР). Спасибо за участие!
Powered by POEM™ Engine Copyright © 2002-2005