Извлечение средних 16 бит длиной 32 бита - PullRequest
0 голосов
/ 25 мая 2018

Я читаю TCPPPL от Страуструпа.В ней приведен пример функции, которая извлекает middle 16 бит длиной 32 бита, например:

unsigned short middle(long a){ return (a>>8)&0xffff;}.

Мой вопрос: не так ли?извлечение последний 16 бит?Скажи мне, как я ошибаюсь.

Ответы [ 4 ]

0 голосов
/ 25 мая 2018

a собирается сдвиг вправо на 8 бит (a>>8) перед битовой обработкой и работой.

0 голосов
/ 25 мая 2018

a >> 8 сместит вправо значение в a на 8 бит.Младшие 8 битов забыты, а биты, ранее пронумерованные 31–8, теперь перемещаются (перенумеровываются) в 23–0.Наконец, маскирование старших 16 битов оставляет вас с битами 15–0, которые изначально (до сдвига) были в позициях 23–8.Вуаля.

0 голосов
/ 25 мая 2018

Он действительно извлекает средние 16 битов:

//    a := 0b xxxx xxxx 1111 1111 1111 1111 xxxx xxxx 
a>>8;   // 0b 0000 0000 xxxx xxxx 1111 1111  1111 1111
&0xffff // 0b 0000 0000 0000 0000 1111 1111  1111 1111
0 голосов
/ 25 мая 2018

Вы заметили часть >>8?Сначала он сдвигает аргумент на восемь бит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...