十进制数转16位二进制(C)

decimal number convert to 16bit binary (C)

我想将十进制数转换为 16 位二进制数。
我的代码根本不起作用,但我确信我做了正确的步骤。
希望得到一些帮助。

#include <stdio.h>
#include <stdlib.h>

const int BIT = 16;

char binaer(int i) {
    char str[BIT];
    int j = 0;
    if(0 <= i && i <= 65535) {
        for(int j = 0; j < BIT + 1; j++) {
            if (i % 2 == 0) {
                str[j] = '0';
            } else {
                str[j] = '1';
            }
            i = i / 2;
        }
    }
    for(int x = BIT - 1; x >= 0; x--){
       printf("%c", str[x]);
    }
}

int main() {

    int value;
    scanf("%d", &value);
    binaer(value);


    return 0;
}

Input: 16
Output: 00001000000000000

首先main()中的循环是没有意义的。调用一次函数就完成了。

str 是一个 16 元素 char 数组,其元素可以通过索引 015 访问。您访问了第 16 个导致未定义的行为。

%s in printf 需要一个空终止的 char 数组。你没有提供。这又是未定义的行为。

该函数没有 return 任何东西。使 return 类型 void.

正在对二进制形式进行反打印。确保这是您想要的。您应该反向打印数组。 for 循环完成后,您将打印它。

for(int in = BIT-1; in >= 0; in--){
    printf("%c",str[in]);
}
printf("\n");

按照我打印的方式,如果遵循,则不需要空终止符。