Сдвинуть значение целочисленной величины (типа 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));
}

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

  1. Подключение заголовочного файла для определения размера типа long.
  2. Объявление функции shiftCicleRight, принимающей два аргумента типа long: num и n.
  3. Определение константы LONG_BITS_NUM, которая равна количеству бит в типе long, вычисленному как результат деления размера этого типа на размер одного бита (char).
  4. Инициализация переменной mask в цикле, в котором перебираются биты от n до 0, устанавливая соответствующий бит в 1.
  5. Вычисление значения переменной lastNBits, которая равна остатку от операции AND num и mask.
  6. Вычисление результата функции в виде сдвига num на n позиций вправо, с последующим установкой битов, соответствующих переменной mask, в 1, и дополнением слева на LONG_BITS_NUM - n позиций.
  7. Возврат результата.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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