我在 (C) 中将十进制数转换为二进制数的函数正在为(某些数字)产生错误的输出! [无数组]

My function to convert decimal number into binary in (C) is producing wrong output for (some numbers)! [Without Arrays]

我有一个函数可以将十进制数转换为二进制数。 问题是对于某些数字,它的输出类似于:

27 = 00011011

但对于 5015,它会将其转换为 82630143 而不是 1001110010111

这是我的功能:

int dec(int num) {
    long bNum = 0;
    int remNum, i = 1, highNum = 32768;
    while (num != 0) {
        remNum = num / highNum;
        remNum = num % 2;
        num /= 2;
        bNum = bNum + remNum * i;
        i = i * 10;
    }
    return bNum;
}

任何帮助将不胜感激。

正如 mch 评论的那样,1001110010111 对于整数来说太大了。您可以尝试将其保存在 unsigned long long int 变量中,但实际上最好的方法是使用字符数组或字符指针。

你应该检查一下你的哪些变量不够 “space”用于存储您的号码。我检查并看到除了 bNum 你的其他变量 i 没有足够的 space:

unsigned long long int dec(int num) {
    unsigned long long int bNum = 0,i = 1;// i should be unsigned long long
    long int remNum,  highNum = 32768;//highNum is better to be long int 
    while (num != 0) {
        remNum = num / highNum;
        remNum = num % 2;
        num /= 2;
        bNum = bNum + remNum * i;
        i = i * 10;
    }
    return bNum;
}

并在您的 main 中检查您存储返回号码的位置:

int main()
{
    unsigned long long int r;
    int a;
    scanf("%d", &a);
    r = dec(a);
}