Как сделать перевод вещественных чисел из 2 в 8 систему счисления на си?

Рейтинг: 0Ответов: 1Опубликовано: 13.03.2023

Нужно сделать перевод числа из 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;
}

Можно попробовать спрашивать сначала целую часть, а потом дробную, но как их соединить, и что делать если пользователь например захочет ввести целое число без дробной части?

Ответы

▲ 0Принят

Для начала нужно узнать длину числа, точнее каждого символа, чтобы мы могли каждый разряд перевести в десятичную систему.

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. Перевернуть массив и будет двоичное число в восьмеричном виде.