繁体   English   中英

在C中将十进制数转换为二进制

[英]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); 其中binarychar[10] ,因此不一定要以null结尾。 您应该在binary再添加一个字符,并将其初始化为\\0

     char binary[11]; binary[10] = '\\0'; 
  • 您错误地初始化了数组:您从i = 50binary[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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM