Сдвинуть значение целочисленной величины (типа long int) на n бит вправо - C (СИ)
Формулировка задачи:
Помогите кто-нибудь. Нужно написать архитектурно независимую функцию позволяющую циклически(!) сдвинуть значение целочисленной величины (типа long int ) на n бит вправо (предусмотреть ситуацию,когда в байте может содержаться число бит отличное от 8).
У меня даже нет примера под глазами, чтобы сделать по аналогии. И вообще не понимаю как это делать.
Решение задачи: «Сдвинуть значение целочисленной величины (типа long int) на n бит вправо»
textual
Листинг программы
#include <limits.h> long shiftCicleRight(long num, long n) { const long LONG_BITS_NUM = sizeof(long) / sizeof(char)* CHAR_BIT; long mask = 0; for (int i = 0; i < n; ++i) { mask |= (1 << i); } long lastNBits = num & mask; return (num >> n) & (mask) | (lastNBits << (LONG_BITS_NUM - n)); }
Объяснение кода листинга программы
- Подключение заголовочного файла
для определения размера типа long. - Объявление функции shiftCicleRight, принимающей два аргумента типа long: num и n.
- Определение константы LONG_BITS_NUM, которая равна количеству бит в типе long, вычисленному как результат деления размера этого типа на размер одного бита (char).
- Инициализация переменной mask в цикле, в котором перебираются биты от n до 0, устанавливая соответствующий бит в 1.
- Вычисление значения переменной lastNBits, которая равна остатку от операции AND num и mask.
- Вычисление результата функции в виде сдвига num на n позиций вправо, с последующим установкой битов, соответствующих переменной mask, в 1, и дополнением слева на LONG_BITS_NUM - n позиций.
- Возврат результата.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д