Конвертер перевода из десятичной системы счисления в шестнадцатиричную и двоичную - C (СИ)
Формулировка задачи:
Здравствуйте !.Помогите пожалуйста написать программу перевода Десятичной СС в 16ую и 2ую .Буду благодарен!
Решение задачи: «Конвертер перевода из десятичной системы счисления в шестнадцатиричную и двоичную»
textual
Листинг программы
#include <stdio.h>
#include <limits.h>
#define BUF_BIN ((sizeof(int) << 3) + 1)
#define BUF_HEX ((sizeof(int) << 1) + 1)
char* dec_to_bin(char* d, int n);
char* dec_to_hex(char* d, int n);
int main(void){
char bin[BUF_BIN], hex[BUF_HEX];
puts( dec_to_bin(bin, INT_MIN) );
puts( dec_to_bin(bin, INT_MAX) );
puts("");
puts( dec_to_hex(hex, INT_MIN) );
puts( dec_to_hex(hex, INT_MAX) );
getchar();
return 0;
}
//10 -> 2
char* dec_to_bin(char* d, int n){
char c, *p, *t = d;
unsigned int x = (unsigned int)n;
do {
*d++ = (char)((x & 0x1) + '0');
} while((x >>= 1) != 0);
*d = '\0';
for(--d, p = t; p < d; ++p, --d){
c = *p;
*p = *d;
*d = c;
}
return t;
}
//10 -> 16
char* dec_to_hex(char* d, int n){
char c, *p, *t = d;
unsigned int y, x = (unsigned int)n;
do {
y = x & 0xF;
if(y < 10)
*d++ = (char)(y + '0');
else
*d++ = (char)(y - 10 + 'A');
} while((x >>= 4) != 0);
*d = '\0';
for(--d, p = t; p < d; ++p, --d){
c = *p;
*p = *d;
*d = c;
}
return t;
}
Объяснение кода листинга программы
- Включаются необходимые заголовочные файлы
- Определяются макросы BUF_BIN и BUF_HEX для определения размера буфера
- Объявляются функции dec_to_bin и dec_to_hex
- Создаются две переменные типа char - bin и hex, которые будут использоваться как буферы для конвертирования чисел
- Вызывается функция dec_to_bin, передавая в неё буфер bin и число INT_MIN в качестве аргументов. Результат выводится на экран
- Вызывается функция dec_to_bin, передавая в неё буфер bin и число INT_MAX в качестве аргументов. Результат выводится на экран
- Выводится символ новой строки
- Вызывается функция dec_to_hex, передавая в неё буфер hex и число INT_MIN в качестве аргументов. Результат выводится на экран
- Вызывается функция dec_to_hex, передавая в неё буфер hex и число INT_MAX в качестве аргументов. Результат выводится на экран
- Программа ожидает ввода символа с клавиатуры (любого символа) для завершения работы
- Функция dec_to_bin принимает на вход указатель на буфер, в который будет записан результат конвертации, и целое число n. Результатом работы функции является указатель на начало буфера с результатом
- Внутри функции используется цикл do-while, который выполняется до тех пор, пока ненулевой бит не станет равным нулю
- Внутри цикла выполняется операция сдвига бита на 1 вправо и затем результат записывается в буфер
- После выполнения цикла в буфере остается только один бит, который записывается в буфер как символ '0' или '1'
- Если бит равен 0, то в буфер записывается символ '0', иначе записывается символ '1'
- Функция возвращает указатель на начало буфера с результатом
- Функция dec_to_hex принимает на вход указатель на буфер, в который будет записан результат конвертации, и целое число n. Результатом работы функции является указатель на начало буфера с результатом
- Внутри функции используется цикл do-while, который выполняется до тех пор, пока ненулевой бит не станет равным нулю
- Внутри цикла выполняется операция сдвига бита на 4 вправо и затем результат записывается в буфер
- Если бит равен 0, то в буфер записывается символ '0', иначе записывается символ 'A'