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