2010-05-14 5 views

ответ

9

Вы не можете. Вы уничтожаете данные, выполняя сдвиг.

+0

и с использованием маски – tbischel

3

Чтобы расширить mhughes ответ:

2884284 в двоичном виде:

1011000000001010111100 

Когда вы смещаются вправо, биты справа обрезаются, а биты слева заполняются 0 . так 2884284 >> 16 становится:

0000000000000000101100 

... который, как вы упомянули, это 44. Обратите внимание, это то же самое, разделив на 2^16 и округление вниз. Обратная операция: << или сдвиг бит влево. Он отсекает биты слева и заполняет биты справа нулем. Но 44 << 16 является:

1011000000000000000000 

... то есть, вы потеряли данные из усеченных битов. Это номер 2883584, который, возможно, достаточно близко. Обратите внимание, что это то же самое, что умножить на 2^16.

Смежные вопросы