C中的十进制到二进制转换

时间:2016-03-21 18:36:38

标签: c binary decimal converter

我尝试编写此代码而不使用任何数组或其他东西,但仅使用循环,我写下来它工作正常,但它有一个问题,我找不到任何解决方案:问题是它不写零 对于exmp: 如果我输入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);

2 个答案:

答案 0 :(得分:0)

如果您尝试调试代码,您会非常清楚地看到它。 如果你在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变量,为什么增加?)。

如果你做一些研究,你会看到很多十进制/二进制算法实现的实现。

答案 1 :(得分:0)

您的代码行为异常,因为当累加器为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