Произвести реверс бит десятичного числа вводимого с клавиатуры при использовании поразрядных операций - 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() для получения числа с обратными битами
- Выводим на экран двоичное представление исходного и обратного чисел
- Продолжаем считывать и обрабатывать числа, пока пользователь не введет ноль
- Завершаем программу
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д