gpt4 book ai didi

c - 二进制小数到十六进制的错误 (turbo c)

转载 作者:行者123 更新时间:2023-11-30 15:16:31 24 4
gpt4 key购买 nike

我刚刚修改了此代码以接受带有小数部分的二进制数。代码如下:

#include <stdio.h>

int main()
{
double binaryval, frac, z;
long int hexadecimalval = 0, i = 1, remainder, num, p;
clrscr();
printf("Enter the binary number: ");
scanf("%lf", &binaryval);
num = binaryval;
frac = binaryval - num;
while (binaryval != 0)
{
remainder = num % 10;
hexadecimalval = hexadecimalval + remainder * i;
i = i * 2;
binaryval = binaryval / 10;
}
printf("Equivalent hexadecimal value: %lX", hexadecimalval);
printf(".");
while (binaryval != 0)
{
while(frac != 0)
{
z = frac * 2;
p = z;
frac = z - p;
}
remainder = p % 10;
hexadecimalval = hexadecimalval + remainder * i;
i = i * 2;
binaryval = binaryval / 10;
}
printf("%lX", hexadecimalval);
getch();
return 0;
}

所以问题是......它给出了一个完全错误的答案

示例输出:
输入二进制数:1111.1111
等效的十六进制值:FFFFFFFF.FFFFFFFF

然后我尝试在此循环中将 'binaryval' 更改为 'num'...

while (num != 0)
{
remainder = num % 10;
hexadecimalval = hexadecimalval + remainder * i;
i = i * 2;
binaryval = num / 10;
}

但它只允许用户输入二进制数而没有其他内容。另外,我什至无法返回我的代码。它有点“卡住”,我必须关闭我的 Turbo C 才能再次运行它。

有人可以告诉我问题是什么以及需要更改的内容吗?提前致谢!

最佳答案

这是为您提供的解决方案,当我检查每个字符的输入时,它不会在内部存储太多内容。不可或缺的部分很简单,只需构建值(value)即可。小数部分有点困难,为了正确对齐它,我一次输入 4 位。

#include <stdio.h>
#include <ctype.h>

int main(void)
{
long whole=0;
int ch, fract=0, bits=0;

// integral part is straight fowrard
while ((ch=getchar()) != EOF && ch != '.' && ch != '\n') {
switch(ch) {
case '0':
whole = whole * 2;
break;
case '1':
whole = whole * 2 + 1;
break;
default:
printf("Bad input\n");
return 1;
}
}
printf("%lX", whole);

// fractional part is more tricky to align correctly
if (ch == '.') {
printf(".");
while ((ch=getchar()) != EOF && ch != '\n') {
switch(ch) {
case '0':
fract = fract * 2;
bits++;
break;
case '1':
fract = fract * 2 + 1;
bits++;
break;
default:
printf("Bad input\n");
return 1;
}
if (bits == 4) { // process 4 bits at a time
printf("%X", fract);
fract = 0;
bits = 0;
}
}
if(bits) { // deal with 1 to 3 trailing bits
printf("%X\n", fract << (4-bits));
}
}
printf("\n");
return 0;
}

您的示例输入和另一个:

1111.1111
F.F

1.000001
1.04

关于c - 二进制小数到十六进制的错误 (turbo c),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33042753/

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