gpt4 book ai didi

c++ - 八进制转二进制混淆

转载 作者:行者123 更新时间:2023-11-28 00:43:59 36 4
gpt4 key购买 nike

我有一个 C++ 代码,可以将 2 位八进制数转换为二进制数。为了测试代码的有效性,我使用了几个在线转换网站,比如

thisthis

当我输入 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,7] 范围内。因此,5859 不是八进制数,您的方法应该会给出错误的结果。

58 的计算结果为 101000 的原因是八进制数的第一位扩展为二进制数的前三位。 5 = 101_2。第二部分的情况相同,但 8 = 1000_2,因此您只能得到 000 部分。

另一种解释是 8 = 0 (mod 8)(我在这里使用 = 符号表示 congruency),所以 80 将使用您的代码以二进制计算为 000

最好的解决方案是进行一些输入验证。例如,在转换时,您可以检查以确保数字在 [0,7]

范围内

关于c++ - 八进制转二进制混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17303963/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com