C语言十进制转二进制

Decimal to Binary convertion in C

我尝试在不使用任何数组或其他东西而只使用循环的情况下编写这段代码,我写下它工作正常但有一个问题,我找不到任何解决方案:问题它不写零吗 例如: 如果我输入 43,它会正确转换:101011 但是当我输入 12 时它只显示 11 而不是 1100

int decimal,binr=0;
int bin=0,rem,i;
printf("enter the decimal number:");
scanf("%d",&decimal);
for(i=1;decimal!=0;i++){

    rem=decimal%2;
    binr= binr*10 +rem;
    decimal=decimal/2;  


}
for(i=0;binr!=0;i++){

    rem = binr%10;
    bin= bin*10 +rem ;
    binr=binr/10;

}
printf("the binary equivalent is: %d",bin);

如果您尝试调试您的代码,您会很清楚地看到它。 如果你在你的 b10 到 b2 程序中 运行 12,它会这样做:

result=0, value=12
  ret = 12 % 2 -> 0
  -> result = result * 10 + ret -> 0*10 + 0
result=0, value=6
  ret = 6 % 2 -> 0
  -> result = result * 10 + ret -> 0*10 + 0
result=0, value=3
...

您可以看到您的程序没有按预期执行。

此外,不要在此处使用 for 循环。明明是while循环(你连i变量都没用过,为什么要增加for?)。

如果你做一些研究,你会看到很多 decimal/binary 算法实现的实现。

您的代码运行异常,因为您在累加器为 0 时退出。相反,如果您计算位数,则不会忽略这些零。请注意,一旦您将输入读入变量,它就不再以十进制表示,因此您可以直接使用二进制,在数字反转时计算位数。

#include <stdio.h>

int main (void) {
    unsigned decimal = 12;
    unsigned reverse = 0;
    unsigned bits = 0;
    while(decimal != 0) {
        reverse = reverse * 2 + decimal % 2;
        decimal /= 2;
        bits++;
    }
    if(bits == 0) {                          // special case
        printf("0");
    }
    while(bits != 0) {
        printf("%u", reverse % 2);
        reverse /= 2;
        bits--;
    }
    printf("\n");
    return 0;
}

程序输出:

1100