Поразрядная обработка целых чисел - 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;
}

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

  1. Подключение стандартной библиотеки для работы с консолью (printf) и обработки строк (sizeof)
  2. Определение функции rol для поразрядной перестановки битов в числе (n) с помощью сдвига и побитового ИЛИ с числом (n) с обратным порядком битов (n >> ((sizeof(size_t)<<8u) - k))
  3. Вызов функции rol в функции main с передачей в нее аргументов 7777u (32-битное беззнаковое целое число) и 32u (смещение в битах)
  4. Вывод на консоль результата работы функции rol(7777u, 32u) и результата вычисления 7777u << 32u)
  5. Возврат 0 из функции main для успешного завершения программы

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

11   голосов , оценка 3.636 из 5
Похожие ответы