<?php
echo (2884284 >> 16), '<br>'; // = 44
echo ((2884284 >> 16) & 0xFFFF), '<br>'; // 44
из вышеизложенного я получил 44как отменить эту операцию?
так, как я могу retrive от 44 до 2884284 ???
<?php
echo (2884284 >> 16), '<br>'; // = 44
echo ((2884284 >> 16) & 0xFFFF), '<br>'; // 44
из вышеизложенного я получил 44как отменить эту операцию?
так, как я могу retrive от 44 до 2884284 ???
Вы не можете. Вы уничтожаете данные, выполняя сдвиг.
Чтобы расширить mhughes ответ:
2884284 в двоичном виде:
1011000000001010111100
Когда вы смещаются вправо, биты справа обрезаются, а биты слева заполняются 0 . так 2884284 >> 16
становится:
0000000000000000101100
... который, как вы упомянули, это 44. Обратите внимание, это то же самое, разделив на 2^16 и округление вниз. Обратная операция: <<
или сдвиг бит влево. Он отсекает биты слева и заполняет биты справа нулем. Но 44 << 16
является:
1011000000000000000000
... то есть, вы потеряли данные из усеченных битов. Это номер 2883584, который, возможно, достаточно близко. Обратите внимание, что это то же самое, что умножить на 2^16.
и с использованием маски – tbischel