Почему оператор «<<» иногда ведет себя по-разному в Javascript и PHP? - PullRequest
1 голос
/ 24 марта 2011

Возьмите следующий фрагмент кода:

<script>
var x = 25;
document.write(x << 9);
</script>

<?php
$x = 25;
echo ($x << 9);
?>

Это выводит: 12800 12800
ХОРОШО. Нормально до сих пор ... Теперь давайте попробуем это:

<script>
var x = 12345678;
document.write(x << 9);
</script>

<?php
$x = 12345678;
echo ($x << 9);
?>

На этот раз вывод 2026019840 6320987136

Почему последние два значения отличаются? И, самое главное (для меня), как мне заставить реализацию PHP делать то, что делает реализация Javascript? Другими словами, я хочу, чтобы мой код PHP выводил 2026019840 вместо 6320987136

Ответы [ 2 ]

3 голосов
/ 24 марта 2011

используйте (x << 9) % 0x100000000 или его эквивалент PHP. (или что ты только что сказал)

1 голос
/ 24 марта 2011

PHP дает вам 64-битный результат.Javascript просто дает вам нижние 32 бита.Если вы используете (x << 9) & 0xFFFFFFFF в PHP, вы получите младшие 32 бита.

вы можете столкнуться с проблемами со знаком бит.Попробуйте (23456789 << 9)

...