Произвести реверс бит десятичного числа вводимого с клавиатуры при использовании поразрядных операций - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Решите пожалуйста. в долгу не останусь, экзамен горит Произвести реверс бит десятичного числа вводимого с клавиатуры при использовании поразрядных операций. иСХОДНОЕ ЧИСЛО и преобразованное вывести в текстовый файл в двух формах: в десятичной и шестнадцатеричной системах счисления. Предусмотреть защиту от неправильного ввода с предложеним повторного ввода. Хоть что нить напишите братцы

Решение задачи: «Произвести реверс бит десятичного числа вводимого с клавиатуры при использовании поразрядных операций»

textual
Листинг программы
#include <stdio.h>
 
unsigned reverse_bits(unsigned n) {
    unsigned m = 0;
    
    for ( ; n; n >>= 1 )
        m = ( m << 1 ) | ( n & 1 );
    
    return m;
}
 
char * binstr(unsigned n) {
    static char buf[BUFSIZ];
    char * head, * tail, tmp;
    
    for ( tail = buf; n; n >>= 1 )
        *tail++ = '0' + ( n & 1 );
    *tail = '\0';
    
    for ( head = buf, tail -= 1; head < tail; ++head, --tail ) {
        tmp = *head;
        *head = *tail;
        *tail = tmp;
    }
    
    return buf;
}
 
int main(void) {
    unsigned n, m;
    
    while ( printf("Number: ") && scanf("%u", &n) == 1 ) {
        printf("Exists: %u -> %s\n", n, binstr(n));
        m = reverse_bits(n);
        printf("Reversed: %u -> %s\n", m, binstr(m));
    }
    
    return 0;
}

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

  1. Включаем стандартную библиотеку ввода-вывода
  2. Функция reverse_bits() принимает десятичное число и возвращает число с обратными битами
  3. Инициализируем переменную m типом unsigned с нулевым значением
  4. Используем поразрядную операцию для получения последнего бита числа n, затем сдвигаем m влево на один разряд и объединяем с битом, который мы только что получили
  5. Повторяем шаг 4 до тех пор, пока число n не станет равным нулю
  6. Возвращаем полученное значение переменной m
  7. Функция binstr() принимает десятичное число и возвращает его двоичное представление в виде строки
  8. Инициализируем буфер (buf) для хранения двоичной строки
  9. Проходим по каждому биту числа n и добавляем его в буфер в виде символа '0' или '1'
  10. Добавляем нулевой символ в буфер для завершения строки
  11. Проходим по буферу с конца на начало и меняем местами символы для получения правильного представления двоичной строки
  12. Возвращаем буфер (buf)
  13. В функции main() считываем десятичное число с клавиатуры, пока пользователь не введет ноль
  14. Вызываем функцию binstr() для получения двоичного представления числа n
  15. Вызываем функцию reverse_bits() для получения числа с обратными битами
  16. Выводим на экран двоичное представление исходного и обратного чисел
  17. Продолжаем считывать и обрабатывать числа, пока пользователь не введет ноль
  18. Завершаем программу

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


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

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

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