Я боролся с оператором shift в PHP, предполагая, что он предшествует арифметическим операциям, таким как +, 1 и т. Д. Я не смог найти никакого определения этого в руководстве по php.
Допустим, у меня есть значение 1, которое я хочу 3, затем 7 и т. Д., Заполняя биты справа (LSB).
Я пытался:
$X = 1;
Затем в цикле:
$X <<= 1 + 1; // returns 4 instead of 3.
$X <<= 1 + 1; // returns 16 instead of 7.
Итак, очевидно, 1 + 1 рассчитывается ДО сдвига.
Мое решение:
$X = 1;
$X <<= 1; // $X=2
$X += 1; // $X=3 as expected
$X <<= 1; // $X=6
$X += 1; // $X=7 as expected
Что немного более неуклюже, но возвращает правильные числа. Разве первый метод не должен давать правильный результат, сначала сдвиг, а затем арифметика?