C 将 4 位数字转换为二进制

标签 c recursion binary

我想在 20 位字段中打印文件中数字的二进制等价物,每 4 位后有空格,但是当数字超过 1024 时(我已经测试过),它不再以二进制形式输出,而是以我不知道的基数(即 1234 = 0000 0014 1006 5408)

这是我的代码

#include <stdio.h>
long convertToBinary(long);

int main()
{
    char binNum[20]; //binary number char array
    int i;
    long b, decNum; //b is output binary number, decNum is each input number from file
    FILE *filePtr;
    filePtr = fopen("numbers.txt", "r");
    while (!feof(filePtr))
    {
        fscanf(filePtr, "%li", &decNum);
        if (decNum < 0  || decNum > 65535)
        {
            printf("Error, %5li is out of range.\n", decNum);
            continue;
        }
        b = convertToBinary(decNum); //function call for binary conversion

        i = 18;
        while (i >= 0)
        {
            if (i == 4 || i == 9 || i == 14)
            {
                binNum[i] = ' ';
            }
            else if (b != 0)
            {
                binNum[i] = b % 10 + '0';
                b /= 10;
            }
            else 
            {
                binNum[i] = '0';
            }
            i--;
        }
        binNum[19] = '.';
        printf("The binary representation of %5li is: ", decNum);
        for (i = 0; i<20; i++)
        {
            printf("%c", binNum[i]);
        }
        printf("\n");
    }

return 0;
}

//Recursion function
long convertToBinary(long number)
{
    if (number == 0)
    {
        return 0;
    }
    else
    {
        return (number % 2 + 10 * convertToBinary(number / 2));
    }
}

文件 numbers.txt 包含如下数字:0 1 2 3 16 17 1234 5678 65535

最佳答案

您的 convertToBinary 函数正在生成一个十进制编码的二进制(与二进制编码的十进制相反),它使用每位十​​进制数字。

看起来 long 与您系统上的 int 具有相同的范围,即 231,涵盖十位十进制数字。一旦你得到第十一位数字,你就会溢出。

切换到具有 64 位的 unsigned long long 将解决该问题。然而,这是次优的:您最好编写一个到二进制的转换,将 0 和 1 写入您提供的 char 数组。如果愿意,您可以递归执行此操作,但迭代解决方案就可以了。

请注意,二进制转换不需要在char 数组中插入空格。这可以通过您的 main 函数来完成。

关于C 将 4 位数字转换为二进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45363198/

相关文章:

java - 找出任意两个节点之间的最长路径

python - 递归使用带有 python 3.5 的请求时出错(GooglePlaces API)

c - 从 mmap-ed 内存中进行有效读取会在负载下产生 SIGBUS。为什么?

c - c 中的字符串指针在用 * 写入时不起作用

c - 为什么此代码打印 1 2 2 而不是预期的 3 3 1?

java - 有没有办法在每次递归时创建一个唯一的变量?

compiler-construction - 如何将源代码转换为 1's and 0' s?

c# - 将整数转换为带前导零的二进制字符串

c - 如何在 Fortran 中读取在 C 中可读的二进制文件

c - 如何使用 OpenGL 绘制冰淇淋