Что происходит в этом коде?

Объясните что происходит в цикле for функции bitrev
#include <stdio.h>
 
unsigned bitrev(unsigned n)
{
   unsigned r;
   
   for (r = 0; n; n >>= 1) {
      r <<= 1;
      r |= n & 1;
   }
   return r;
}
 
int main()
{
   unsigned n;
   unsigned n;
   scanf("%u", &n);
   printf("%u\n", bitrev(n));
   return 0;
}

Я понимаю назначение функции.
Я не могу понять что делает строка r |= n & 1;
  • Вопрос задан
  • 2762 просмотра
Решения вопроса 1
@encyclopedist
Выражение
n & 1выделяет младший бит числа n (& - это побитовое "и").
r |= n & 1эквивалентно (| - это побитовое "или")
r = r | (n & 1)
То есть это выражение в целом берет младший бит переменной n и помещает его в переменную r.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Sumor
Как следует из названия функции, она переворачивает биты числа.
100111011 = 315 переворачивает в 110111001 = 441
В цикле for заполняется текущий бит результата - сначала сдвигается на бит, и этот бит заполняется текущим справа битом исходного числа.
Получается, что в цикле for биты перетекают из числа n в число r. С каждым циклом n сдвигается на бит и этот бит устанавливается в добавленный бит r.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы