[英]Converting decimal number to binary in C
我试图将十进制数转换为二进制,但最终以某种方式最终得到“随机” 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;
}
您的代码有多个问题(除了我发现的顺序之外,没有特定的顺序):
您正在在binary[i] = number % 2
处以int
形式初始化char
; 您应该将整数正确地转换为字符,如下所示:
binary[i] = '0' + (number % 2);
您正在写printf("\\n%s", binary);
其中binary
是char[10]
,因此不一定要以null结尾。 您应该在binary
再添加一个字符,并将其初始化为\\0
:
char binary[11]; binary[10] = '\\0';
您错误地初始化了数组:您从i = 50
和binary[10]
。 您应该添加一个常量并使用两次:
#define MAX_SIZE 32 int i = MAX_SIZE - 1; char binary[MAX_SIZE + 1]; binary[MAX_SIZE] = '\\0';
请注意,您忘记了-1
,这避免了您在字符串末尾之后进行写操作,而+1
实质上是最后一个问题
您正在读取一个int
并尝试获取其二进制表示形式。 但负值的(true)二进制表示形式通常不是您所期望的。 优先阅读unsigned int
:
unsigned int number; scanf("%u", &number);
您可以将number % 2
替换为number & 1
,将number /= 2
替换为number >>= 1
; 它更确切地表示您正在number
上执行哪些(二进制)运算。 此外,这实际上应该在负整数上正常工作,而您的版本则不应该这样做(未经测试,无论如何,您通常没有理由要获取负整数的二进制表示形式):
binary[i--] = '0' + (number & 1); number >>= 1;
您在数字为零后停止,但这意味着您不必填充binary
数组; 这意味着您可能在binary
的开头有未初始化的字符(在VC ++的调试模式下,应将IIRC显示为ÿ
字符)。 您应该在循环之后添加诸如此类的内容,以填充数组:
while (i >= 0) binary[i--] = '0';
希望有帮助!
您将i初始化为50,但是二进制缓冲区的长度只有10个字符。 因此,您没有在循环内填充正确的元素。
#include <stdio.h>
#define MAX_SIZE 32
int main()
{
unsigned int number = 0;
int i = MAX_SIZE - 1;
char binary[MAX_SIZE + 1];
binary[MAX_SIZE] = '\0';
printf("Enter a number: ");
scanf("%u", &number);
while(number!=0)
{
binary[i--] = '0' + (number & 1);
number >>= 1;
}
while (i >= 0)
binary[i--] = '0';
printf("\n%s", binary);
}
希望这可以帮助....
您正在从背面到正面填充阵列。 一旦数字“完成”,您就停止了,不要在数组的开头“剩余”字符以免初始化。 在开始时将整个数组初始化为'0'
,或者添加类似以下内容:
while(i >= 0) {
binary[i] = '0';
i--;
}
在末尾。 (我认为我必须初始化为“ 0”)。 您还需要确保buffer
足够大(50,而不是10)。 并插入字符,而不是整数: binary[i] = '0' + (number % 2);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.