Циклический сдвиг битов - 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 для объединения полученных значений и возвращаем результат
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д