Поразрядная обработка целых чисел - C (СИ)
Формулировка задачи:
Привет.
Требуется ваша помощь в написании кода на С, используя побитовые сдвиги.
Собственно условие:
Циклически сдвинуть целое число N на K разрядов влево.
Спасибо всем за помощь.
Решение задачи: «Поразрядная обработка целых чисел»
textual
Листинг программы
#include <stdio.h> size_t rol(size_t n, size_t k) { return (n << k) | (n >> ((sizeof(size_t)<<8u) - k)); } int main(void){ printf("%u - %u\n", rol(7777u, 32u), 7777u << 32u); return 0; }
Объяснение кода листинга программы
- Подключение стандартной библиотеки для работы с консолью (printf) и обработки строк (sizeof)
- Определение функции rol для поразрядной перестановки битов в числе (n) с помощью сдвига и побитового ИЛИ с числом (n) с обратным порядком битов (n >> ((sizeof(size_t)<<8u) - k))
- Вызов функции rol в функции main с передачей в нее аргументов 7777u (32-битное беззнаковое целое число) и 32u (смещение в битах)
- Вывод на консоль результата работы функции rol(7777u, 32u) и результата вычисления 7777u << 32u)
- Возврат 0 из функции main для успешного завершения программы