Чтобы расширить на mhughes ответ:
2884284 в двоичном виде:
1011000000001010111100
Когда вы сдвигаетесь вправо, биты справа обрезаются, а биты слева заполняются 0. Итак, 2884284 >> 16
становится:
0000000000000000101100
... который, как вы упомянули, равен 44. Обратите внимание, что это то же самое, что деление на 2 ^ 16 и округление вниз. Операция реверса <<
или сдвиг бит влево. Он обрезает биты слева и заполняет биты справа нулями. Но 44 << 16
это:
1011000000000000000000
... то есть вы потеряли данные из усеченных битов. Это число 2883584, что может быть достаточно близко. Обратите внимание, что это то же самое, что умножение на 2 ^ 16.