【问题标题】:How to convert integer to binary form in C [duplicate]如何在C中将整数转换为二进制形式[重复]
【发布时间】:2020-02-26 07:38:09
【问题描述】:

我正在尝试将用户输入的整数转换为二进制形式,但我不断收到警告说“二进制”未在最后一个 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;
}

【问题讨论】:

  • 旁白:你能弄清楚为什么程序总是为任何非0值输出1吗?

标签: c


【解决方案1】:

欢迎来到 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;
}

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

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

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

【讨论】:

  • integer % 2; 返回 0、1 或 -1。
  • 感谢帮助
【解决方案2】:

仅由十进制 1 和0 位组成的整数不是二进制。计算机上的int 已经是二进制的; %d 格式说明符以 十进制 创建该值的 字符串表示。生成一个二进制值在表示为十进制时看起来像其他二进制值,这在数学上是荒谬的。尤其是因为这种方法仅适用于 10 位值(在 32 位 int 上),或 19 位使用 64 位 int。

此外,该解决方案需要进一步考虑(和更多代码)来处理负整数值 - 尽管由于您可以表示的位数有限,您如何做到这一点并不明确。

由于int 已经是一个二进制值,直接呈现二进制位模式比计算一些恰好类似于二进制值的十进制值要简单得多:

    // Skip leading zero bits
    uint32_t mask = 0x80000000u ;
    while( mask != 0 && (integer & mask) == 0 ) mask >>= 1 ;

    // Output remaining significant digits 
    printf("The integer in binary is ");
    while( mask != 0 )
    {
        putchar( (integer & mask) == 0 ? '0' : '1' ) ;
        mask >>= 1 ;
    }
    putchar( '\n' ) ;

【讨论】:

    猜你喜欢
    • 2022-01-20
    • 2021-11-03
    • 1970-01-01
    • 2015-12-28
    • 2021-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多