Переписываю некий код с яваскрипта на пхп
function level(k, d) {
return (k << d) | (k >>> (32 - d))
}
Получилось
function level($k, $d) {
return ($k << $d) | abs($k >> (32 - $d));
}
Но вот проблемка, на level(14,8) яваскрипт и пхп возвращают одинаково 3584. На более крупных бяка level(10000,30):
10737418240000 | 2500 //js 2500
10737418240000 | 2500 //php 10737418242500
Где сделал ошибку?
песочница http://sandbox.onlinephpfunctions.com/code/aed1b6d153c7c21518c317664a0a1b4d24dd2070
Проблема заключается в том, что битовые операторы в javascript работают только с 32х битными числами.
Все операнды и результат в итоге приводятся в 32х битному числу.
Например в случае со сдвигом влево реальное число будет 10737418240000
, если перевести его в двоичный вид, получим следующее:
10011100010000000000000000000000000000000000
Как можно заменить последние 32 символа 0, что дает при приведении к 32х битному числу - 0.
Таким образом 10000 << 30
== 0
Далее идет побитовое ИЛИ c 2500, и так как в исходном числе все 0 - получаем 2500.
В php такого ограничения нет.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Как сделать, когда доскролишь до самого низа страницы, чтобы поменялся background, как отловить тот момент, когда уже уперлись в самый низ страницы...
Имеется таблица со вторичным ключом с поведением ON DELETE SET NULL
Появляются иконки видео (звук, дорожка воспроизведения, кнопка увеличения экрана и тд