Циклический сдвиг битов - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Я понимаю конечно, что тема уже надоела... Но объясните мне плз!!! Есть функция якобы циклического сдвига влево....
Листинг программы
  1. unsigned long ROL (unsigned long a, int offset)
  2. {
  3. return a << offset | a >> (32 - offset);
  4. }
Пусть есть a = 10D = 1010B; offset = 1; a <<< offset = 0101B Функция в рез-те вернет 10100B т.е. выполнит операцию обычного сдвига. Видимо это потому, что
Листинг программы
  1. a >> (32 - offset)
равно нулю... Как от этого избавиться??? Как получить человеческий циклический сдвиг битов?

Решение задачи: «Циклический сдвиг битов»

textual
Листинг программы
  1. #include <stdio.h>
  2.  
  3. unsigned long rol(unsigned long a, int offset);
  4.  
  5. int main(void)
  6. {
  7.     printf("%lX" "\n", rol(0x10D, 1));
  8.     return 0;
  9. }
  10.  
  11. unsigned long rol(unsigned long a, int offset)
  12. {
  13.     return a << offset | a >> (32 - offset);
  14. }

Объяснение кода листинга программы

  1. Включаем заголовочный файл для использования функций ввода-вывода
  2. У нас есть функция rol(unsigned long a, int offset), которая принимает два аргумента: a (входное значение) и offset (смещение)
  3. В функции main() мы вызываем rol(0x10D, 1) и выводим результат на консоль с помощью printf()
  4. В функции rol() мы используем операцию сдвига << для сдвига битов влево на offset позиций и операцию сдвига >> для сдвига битов вправо на (32 - offset) позиций
  5. Затем мы используем оператор OR для объединения полученных значений и возвращаем результат

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.2 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы