c - 如何在C中将整数转换为二进制形式

标签 c

我正在尝试将用户输入的整数转换为二进制形式,但我不断收到警告,指出“二进制”在最后一个 printf 语句中未初始化。

#include <stdio.h>

int main(void)
{
long int integer, binary;

    printf("Enter an integer: \n");
    scanf("%ld", &integer);
    while(integer != 0)
    {
        binary = integer % 2;
        integer = integer / 2;
    }
    printf("The integer in binary is %ld", binary);
    return 0;
}

最佳答案

欢迎来到 Stack Overflow。

binary是在while循环期间设置的,但是如果您实际上为整数输入零,会发生什么?在这种情况下,循环不会运行,并且值 binary 没有初始化值。惊喜!

这就是它提示的原因。

但是,即使您输入非零值,您使用的算法也只会为 binary 提供您要转换的数字中最低位的值,因此您需要不同的代码使其能够在运行整数时构建二进制值。

基本上,您想要做的是将二进制值转换为二进制的十进制表示形式,这有足够的限制,我不确定它是否值得这样做。

仍然:

long int binary = 0;

   while (integer != 0)
   {
       binary += integer % 2;  // 1 or 0
       binary *= 10;           // a "binary" decimal shift left
       integer /= 2;
   }
   printf("Integer in binary is %ld", binary);
   return 0;
}

这可行,但它有一个严重的限制,即只能表示相对较小的二进制值。

人们解决此练习的最常见方法是将整数值转换为字符串而不是整数,以便于显示。

我想知道这是否是您想要解决的问题?

关于c - 如何在C中将整数转换为二进制形式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58634957/

相关文章:

c - fork 过程和使用 execve 调用 bc 时出现问题

c - 在嵌入式 c 中使用 printf

c-linux-debian 多线程程序中对函数的 undefined reference

将 C 处的 WHILE 循环更改为 FOR 循环

c - 如何在全局变量中保存进程 ID?

c - 我可以在 64 位机器上制作这个结构的最小尺寸是多少?

c - C 中的字符串链表

c - 以特定格式输入(矩阵)

c - 在 c 中标记化

c - scanf()、sscanf() 或 fscanf() 中的 %[] 或 %[^] 说明符是否将输入存储在以 null 结尾的字符数组中?