PHP и побитовый сдвиг
PHP, как известно, язык не имеющий строгой типизации переменных, как, например, С или С++. Объявляете переменную, пихаете в нее данные, а интерпретатор сам решает, в каком виде их хранить. Однако так же присутствует и механизм, позволяющий специально преобразовать переменную из одного типа в другой – так называемое приведение типов.
Что касается целых чисел, интерпретатор может определить, что результат операции не поместится в переменную и конвертирует ее в другой тип. В PHP нет поддержки беззнаковых чисел (uint, unsigned integer) и результат операции может быть автоматически помещен в float (double).
Но во время операции побитового сдвига (bitwise shift) влево (<<) мы легко можем выйти за границы integer и неожиданно получить отрицательное число. Приведу пример кода:
Читать остальную часть заметки »Теги: binary, bitwise shift, bug, bugs, PHP