Как сделать перевод вещественных чисел из 2 в 8 систему счисления на си?
Нужно сделать перевод числа из 2 системы счисления в 8, в том числе вещественные (типо 011.1) Но вот как это сделать, я не особо понимаю, пока есть только с целыми числами:
int main() {
setlocale(LC_ALL, ".1251");
char c;
int result = 0;
printf("Введите число в 2 системе счисления: ");
while (scanf("%c", &c))
{
if ((c < '0') || (c > '1')) break;
result <<= 1;
result += c - '0';
}
printf("Ваше число в 8 системе счисления %o\n", result);
getchar();
return 0;
}
Можно попробовать спрашивать сначала целую часть, а потом дробную, но как их соединить, и что делать если пользователь например захочет ввести целое число без дробной части?
Ответы (1 шт):
Автор решения: Alexey
→ Ссылка
Для начала нужно узнать длину числа, точнее каждого символа, чтобы мы могли каждый разряд перевести в десятичную систему.
const int value = 1010111;
int length = 0;
int tempValue = value;
while (tempValue)
{
tempValue /= 10;
length++;
}
Потом перевести в десятичную систему:
tempValue = 0;
for (int i = length; i > 0; i--)
tempValue += (bool)((1 << (i - 1)) & value) * pow(2, i - 1);
Ну а дальше последовательное деление на 8. Перевернуть массив и будет двоичное число в восьмеричном виде.