| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Perl: Системное программирование > операцию ^ совместить с JavaScript |
| Автор: admsasha 21.5.2007, 18:04 |
| в JavaScript есть такой код 6537379050^1797494240, резутат -292829726 если пишу тоже самое на perl, то результат 2497473055 Что это (^) за действие ? Почему результаты разные, и как их сделать одинаковыми, что в Perl поправить ? P.s. ой, не туда вопрос, промазал... модеры прошу перенести... как я понимаю, это должно быть в системном... |
| Автор: admsasha 22.5.2007, 15:41 | ||
Вообщем надо вот эту функцию переписать, может у кого идеи есть....
|
| Автор: Ivan Kolesnikov 24.5.2007, 14:58 | ||||||
| Твой пост меня заинтересовал... решил разобраться. Операция которую ты здесь привел - это побитовый xor Теперь почему разные результаты. Правильный результат:
Как видно результат больше 2^32 и Javascript приводит его к 32 разрядам
Теперь о Perl. Он делает совсем хитро, так как 1-е число не помещается в 32 разряда, он заменяет его максимальным 32 разрядным беззнаковым, то есть 2^32-1 = 4294967295 Получается
|
| Автор: admsasha 24.5.2007, 15:15 |
| А идеи есть как javascript код, написать на perl ? (JavaScript код подогнать под perl вроде как получиться, а вот наоборот :-( ) т.е. результаты должны быть одинаковы... но Javascipt код менять нельзя. |
| Автор: Ivan Kolesnikov 25.5.2007, 07:42 | ||
Вот что я придумал
Оно не совсем в стиле Perl (можно наверное покороче), но на приведенных тобой парах работает, на других не знаю не проверял... |
| Автор: Ivan Kolesnikov 25.5.2007, 13:03 | ||
Сори... чуть-чуть ошибся
Здесь 2 эквивалентные реализации функций, во 2-й меньше действий, а 1-я понятнее. Это уже готовые функции, для того чтобы в 1-й оставить только xor необходимо закоментировать условие |
| Автор: admsasha 25.5.2007, 13:04 | ||||
Если кому интересно.
Добавлено через 1 минуту и 56 секунд Ivan Kolesnikov, Странно, но вывод всё равно
|
| Автор: Ivan Kolesnikov 25.5.2007, 13:13 |
| admsasha, я запустил приведенную тобой функцию foo для javascript (вместе с условием в конце) ее результат 4002146570 А вообще твой вариант с остатком от деления лучше моего, так как при больших числах мой вариант будет работать очень долго |
| Автор: admsasha 25.5.2007, 13:26 |
| Ivan Kolesnikov, интересно.. а какой браузер ? |
| Автор: Ivan Kolesnikov 25.5.2007, 13:31 | ||
| Сейчас проверил в IE7, Opera 9, Firefox 2 везде результат один 4002146570. Запускаю следующую страницу
|
| Автор: admsasha 25.5.2007, 14:05 |
| Ivan Kolesnikov, Разобрался, это я не так считал... я в примере то давал только результат word1^word2, а так, да формула вроде верная. Спасибо. Вообщем тема пока закрыта. Вроде как всё работает. |