Циклически сдвинуть число влево на n разрядов - C (СИ)
Формулировка задачи:
Никак не могу понять с чего начать, посоветуйте что то пожалуйста:Заданное целое число х. Составить программу, циклически сдвигает х влево на n разрядов
Решение задачи: «Циклически сдвинуть число влево на n разрядов»
textual
Листинг программы
uint32_t foo (uint32_t num, uint32_t n)
{
if (n == 32)
return num;
else if (n > 32)
n %= 32;
num = (num << n) | (num >> (32 - n));
return num;
}
Объяснение кода листинга программы
- Входные данные: uint32_t num - 32-битное беззнаковое число, представляющее собой значение, которое необходимо циклически сдвинуть, и uint32_t n - 32-битное беззнаковое число, определяющее количество разрядов, на которое необходимо сдвинуть число.
- Проверка условия: если n равно 32, то функция возвращает входное значение num.
- Проверка условия: если n больше 32, то значение n приводится к модулю 32 (остаток от деления на 32).
- Выполняется циклический сдвиг числа num влево на n разрядов:
- числовое значение num сдвигается влево на n разрядов,
- при этом высвобождаются справа разряды, которые заполняются значением перестановки разрядов исходного числа.
- Возвращается полученное после сдвига число.