Что делают эти два побитовых оператора? - PullRequest
0 голосов
/ 02 марта 2020

Кто-нибудь может объяснить, что делает следующее выражение?

int someValue = (((buffer[position + 1] << 8) | buffer[position] & 0xff) << 16) 

Я получаю, что буфер [position + 1] << 8 смещает 8 бит влево, и этот буфер [position] & 0xff в основном извлекает эти 8 битов, но какова роль "или" (|) и почему все это сдвигается на 16 бит влево? Они стираются? Заранее спасибо. </p>

1 Ответ

1 голос
/ 02 марта 2020

В основном это преобразовывает два байта в 16-битное целое число. Два байта находятся в буфере [позиция] и буфере [позиция + 1].

Сначала байт в позиции + 1 сдвинут влево на 8 бит. Во-вторых, первый байт очищает свои старшие биты.

Затем эти два байта объединяются с побитовым оператором или.

Затем это число до сих пор сдвигается влево на 16 бит, предположительно чтобы еще 2 байта были помещены в нижнюю часть этого целого числа.

...