将十进制转换为具有长整数值的二进制 C

标签 c int long-integer

我的程序旨在通过从输入文件读取值然后将二进制值输出到输出文件中来将十进制转换为二进制。假设输入文件有这些数字:

190 31 5 891717742

除了 891717742 之外,所有内容都可以很好地转换为二进制。这会输出一个完全偏离二进制输出的值。我尝试过 LONG 但它们只是输出负值。例如,这将输出:

11000100 11110010 11 "1434923237" <- not right (not the actual binary values)

十进制转二进制(来自在线):

char* convertDecimalToBinary(int n)
{
  int binaryNumber = 0;
  int remainder, i = 1;
  static char buff[100];

    while (n!=0)
    {
        remainder = n%2;

        n /= 2;
        binaryNumber += remainder*i;
        i *= 10;
    }
    sprintf(buff, "%d", binaryNumber );
    return buff;
}

最佳答案

根本问题是您尝试使用 int 来存储二进制表示形式。 int 就是一个整数。在内存中,它以二进制表示,但 C 语法允许您在对整数进行赋值或执行其他操作时使用基数 10 和基数 16 文字。这可能会让人觉得它没有被视为二进制数,但事实确实如此。在您的程序中,您混淆了以 2 为基数的表示形式和以 10 为基数的表示形式。 891717742(基数 10)转换为二进制是 110101001001101000100001101110。您的算法本质上试图做的是将基数 10 数字 110101001001101000100001101110 存储在 int 中。这个以 10 为基数的数字甚至比 64 位数字都大,它实际上需要 97 位来存储。

检查这个答案,看看如何打印出 C: Is there a printf converter to print in binary format? 中 int 的二进制表示形式

关于将十进制转换为具有长整数值的二进制 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52548304/

相关文章:

c - 打印从用户获得的 int 值

c - C : operands of unequal types, char[255] 和 char* 中的字符串问题

c - 用逗号分隔符和 sscanf 分隔的整数

ios - swift :Issue with increment Int inside String

c++ - 为什么这个函数不会超过值 2^31?

c++ - 对重载的模糊调用 - 强制转换

java - 从 double 到 long 的强制转换的细节

c - Valgrind 段错误无效写入大小 8 C

c++ - 如何构建这个宏

c - 在c中的int值的开头添加0