Циклический сдвиг битов - C (СИ)
Формулировка задачи:
Я понимаю конечно, что тема уже надоела... Но объясните мне плз!!!
Есть функция якобы циклического сдвига влево....
Пусть есть a = 10D = 1010B; offset = 1;
a <<< offset = 0101B
Функция в рез-те вернет 10100B т.е. выполнит операцию обычного сдвига. Видимо это потому, что
равно нулю...
Как от этого избавиться??? Как получить человеческий циклический сдвиг битов?
unsigned long ROL (unsigned long a, int offset) { return a << offset | a >> (32 - offset); }
a >> (32 - offset)
Решение задачи: «Циклический сдвиг битов»
textual
Листинг программы
#include <stdio.h> unsigned long rol(unsigned long a, int offset); int main(void) { printf("%lX" "\n", rol(0x10D, 1)); return 0; } unsigned long rol(unsigned long a, int offset) { return a << offset | a >> (32 - offset); }
Объяснение кода листинга программы
- Включаем заголовочный файл
для использования функций ввода-вывода - У нас есть функция rol(unsigned long a, int offset), которая принимает два аргумента: a (входное значение) и offset (смещение)
- В функции main() мы вызываем rol(0x10D, 1) и выводим результат на консоль с помощью printf()
- В функции rol() мы используем операцию сдвига << для сдвига битов влево на offset позиций и операцию сдвига >> для сдвига битов вправо на (32 - offset) позиций
- Затем мы используем оператор OR для объединения полученных значений и возвращаем результат
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д