Восьмеричное и двоичное преобразование

У меня есть код на C ++, который преобразует 2-значное восьмеричное число в двоичное число. Для проверки правильности кода я использовал несколько сайтов онлайн-конвертации, таких как

этот а также
этот

Когда я ввожу 58 или 59 в качестве восьмеричного значения, оно говорит о недопустимых восьмеричных значениях, но когда я ввожу 58 в моем коде, это дает двоичное число как — 101000. Опять же для тестирования я ввожу 101000 как двоичное число в калькуляторе выше веб-сайта, тогда они дают мне результат 50 как восьмеричное значение.

Мне нужно некоторое объяснение, почему это так.

Вот код C ++ —

#include <iostream.h>
#include <conio.h>
void octobin(int);

void main()
{
clrscr();
int a;
cout << "Enter a 2-digit octal number : ";
cin>>a;
octobin(a);
getch();
}
void octobin(int oct)
{
long bnum=0;
int A[6];
//Each octal digit is converted into 3 bits, 2 octal digits = 6 bits.
int a1,a2,quo,rem;
a2=oct/10;
a1=oct-a2*10;
for(int x=0;x<6;x++)
{
A[x]=0;
}
//Storing the remainders of the one's octal digit in the array.
for (x=0;x<3;x++)
{
quo=a1/2;
rem=a1%2;
A[x]=rem;
a1=quo;
}
//Storing the remainders of the ten's octal digit in the array.
for(x=3;x<6;x++)
{
quo=a2/2;
rem=a2%2;
A[x]=rem;
a2=quo;
}
//Obtaining the binary number from the remainders.
for(x=x-1;x>=0;x--)
{
bnum*=10;
bnum+=A[x];
}
cout << "The binary number for the octal number " << oct << " is " << bnum << "." << endl;
}

0

Решение

Восьмеричные числа имеют цифры, которые находятся в диапазоне [0,7], Таким образом, 58 а также 59 являются не восьмеричные числа, и ваш метод должен давать ошибочные результаты.

Причина того, что 58 оценивает 101000 потому что первая цифра восьмеричного числа расширяется до первых трех цифр двоичного числа. 5 = 101_2, Та же история для второй части, но 8 = 1000_2так что вы получите только 000 часть.

Альтернативное объяснение состоит в том, что 8 = 0 (mod 8) (Я использую = подписать для конгруэнтность здесь), так что оба 8 а также 0 будет оценивать 000 в двоичном коде с использованием вашего кода.

Наилучшим решением будет проверка входных данных. Например, во время преобразования вы можете убедиться, что цифра находится в диапазоне [0,7]

3

Другие решения

Вы не можете использовать 58 или 59 в качестве входного значения. Это восьмеричное, ради Христа.

Допустимые цифры от 0 до 7 включительно.

0

Если вы кодируете число в базе 8, ни один из октетов не может быть 8 или больше. Если вы собираетесь делать октет кода по октету, необходимо выполнить тест, чтобы увидеть, является ли октет 8 или 9, и выдать ошибку. Прямо сейчас ваш код не проверяет это, поэтому 8 и 9 переполняются до 10.

0

58 и 59 не являются действительными восьмеричными значениями … максимальная цифра, которую вы можете использовать, это yourbase-1:

десятичная => базовая = 10 => цифры от 0 т 9

шестнадцатеричный => base = 16 => цифры от 0 до 15 (ну, от 0 до F)

Восьмеричное => базовое = 8 => цифры от 0 до 7

0
По вопросам рекламы [email protected]