Произвести реверс бит десятичного числа вводимого с клавиатуры при использовании поразрядных операций - 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; }
Объяснение кода листинга программы
- Включаем стандартную библиотеку ввода-вывода
- Функция reverse_bits() принимает десятичное число и возвращает число с обратными битами
- Инициализируем переменную m типом unsigned с нулевым значением
- Используем поразрядную операцию для получения последнего бита числа n, затем сдвигаем m влево на один разряд и объединяем с битом, который мы только что получили
- Повторяем шаг 4 до тех пор, пока число n не станет равным нулю
- Возвращаем полученное значение переменной m
- Функция binstr() принимает десятичное число и возвращает его двоичное представление в виде строки
- Инициализируем буфер (buf) для хранения двоичной строки
- Проходим по каждому биту числа n и добавляем его в буфер в виде символа '0' или '1'
- Добавляем нулевой символ в буфер для завершения строки
- Проходим по буферу с конца на начало и меняем местами символы для получения правильного представления двоичной строки
- Возвращаем буфер (buf)
- В функции main() считываем десятичное число с клавиатуры, пока пользователь не введет ноль
- Вызываем функцию binstr() для получения двоичного представления числа n
- Вызываем функцию reverse_bits() для получения числа с обратными битами
- Выводим на экран двоичное представление исходного и обратного чисел
- Продолжаем считывать и обрабатывать числа, пока пользователь не введет ноль
- Завершаем программу
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д