我正在尝试将十进制数转换为二进制数,但不知何故最终得到“随机”ASCII 符号作为输出。这是我的程序:
#include <stdio.h>
int main()
{
int number = 0;
int i = 50;
char binary[10];
printf("Enter a number: ");
scanf("%d", &number);
while(number!=0){
binary[i] = number % 2;
i--;
number = number / 2;
}
printf("\n%s", binary);
return 0;
}
您的代码存在多个问题(没有具体顺序,但我发现了它们):
-
您正在初始化一个char
与int
在线binary[i] = number % 2
;您应该正确地将整数转换为字符,如下所示:
binary[i] = '0' + (number % 2);
-
你正在写printf("\n%s", binary);
where binary
is a char[10]
,因此不一定以空终止。您应该再添加一个字符binary
并将其初始化为\0
:
char binary[11];
binary[10] = '\0';
-
您错误地初始化了数组:您从i = 50
and binary[10]
。您应该添加一个常量并使用它两次:
#define MAX_SIZE 32
int i = MAX_SIZE - 1;
char binary[MAX_SIZE + 1];
binary[MAX_SIZE] = '\0';
请注意-1
你忘记了,这避免了你在字符串末尾写入,并且+1
这基本上是最后一个问题
-
您正在阅读一本int
并尝试获取其二进制表示形式;但负值的(真正的)二进制表示通常不是您所期望的。更喜欢阅读unsigned int
:
unsigned int number;
scanf("%u", &number);
-
你可以替换number % 2
with number & 1
and number /= 2
with number >>= 1
;这更准确地代表您正在运行的(二进制)操作number
。此外,这实际上应该在负整数上正确工作,而你的版本不应该(未经测试,无论如何你通常没有理由想要获得负整数的二进制表示):
binary[i--] = '0' + (number & 1);
number >>= 1;
-
您在数字为零后停止,但这意味着您不一定填写binary
大批;这意味着您可能在开头有未初始化的字符binary
(在调试模式下的 VC++ 上,IIRC 应显示为ÿ
人物)。您应该在循环之后添加类似这样的内容以填充数组:
while (i >= 0)
binary[i--] = '0';
希望有帮助!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)