C 十进制到二进制转换错误

C 十进制到二进制转换错误,c,binary,decimal,C,Binary,Decimal,我试图创建一个程序,将十进制转换为二进制,并在二进制之前打印0b 如果输入为0,我需要程序打印0b0;如果输入为29,则需要程序打印0b11101。我似乎可以做一个,但不能做另一个,当我修复这个错误时,另一个停止工作 我哪里做错了 #include <stdio.h> int main() { int n,i = 0,j=0,k; scanf("%d",&n); int bin[100]; k=n; //printf("n is %d \n",n);

我试图创建一个程序,将十进制转换为二进制,并在二进制之前打印0b

如果输入为0,我需要程序打印0b0;如果输入为29,则需要程序打印0b11101。我似乎可以做一个,但不能做另一个,当我修复这个错误时,另一个停止工作

我哪里做错了

#include <stdio.h>
int main()
{

int n,i = 0,j=0,k;

scanf("%d",&n);
int bin[100];

    k=n;

    //printf("n is %d \n",n);
    while(n!=0)
    {
        //printf("n is %d :\n",n);
     bin[i]= n%2;
        //printf ("n/2 is  %d\n",n%2);
     n=(n-n%2)/2;
     i++;
        //printf("i is %d\n",i);
    }
printf("0b");
    //if (n='0')
    //{
    //  printf("0");
    //}


    //else
    //{
        for (j=i;j>0;j--)
        {
            //printf("\n j is,%d and there ,is %d\n",j,bin[(j-1)]);
            printf("%d",bin[(j-1)]);

        }
    //}

}
#包括
int main()
{
int n,i=0,j=0,k;
scanf(“%d”和“&n”);
int bin[100];
k=n;
//printf(“n是%d\n”,n);
而(n!=0)
{
//printf(“n是%d:\n”,n);
bin[i]=n%2;
//printf(“n/2是%d\n”,n%2);
n=(n-n%2)/2;
i++;
//printf(“i是%d\n”,i);
}
printf(“0b”);
//如果(n='0')
//{
//printf(“0”);
//}
//否则
//{
对于(j=i;j>0;j--)
{
//printf(“\n j是%d,其中有%d\n”,j,bin[(j-1)]);
printf(“%d”,bin[(j-1)];
}
//}
}
#包括
int main()
{
int n,i=0,j=0,k;
scanf(“%d”和“&n”);
int bin[100];
k=n;
而(n!=0)
{
bin[i]=n%2;
n=(n-n%2)/2;
i++;
}
printf(“0b”);
如果(k==0)
{
printf(“0”);
}
其他的
{
对于(j=i-1;j>=0;j--)
{
printf(“%d”,bin[(j-1)];
}
}
}

0不需要作为特例处理。简单修复:使用
do
循环,而不是
while()

#包括
int main(){
int n,i=0,j=0,k;
scanf(“%d”和“&n”);
int bin[100];
//k=n;//不需要
//而(n!=0){
做{
bin[i]=n%2;
//另一种简化
//n=(n-n%2)/2;
n/=2;
i++;
}而(n);
printf(“0b”);
对于(j=i;j>0;j--){
printf(“%d”,bin[(j-1)];
}
}

处理十进制到二进制转换函数的幼稚且更可移植的实现所需的其他编码

#include <limits.h>

void print_binary(unsigned x){
    unsigned n=UINT_MAX;

    n = ~(n >> 1);

    while (n){ 
        if (n & x)
            putchar('1');
        else
            putchar('0');
        n = n >> 1;
    }
    putchar('\n');
}
#包括
无效打印\u二进制(无符号x){
无符号n=UINT_MAX;
n=~(n>>1);
而(n){
如果(n&x)
putchar('1');
其他的
putchar('0');
n=n>>1;
}
putchar('\n');
}

您能给我看一下当前输出吗?我已经发布了答案,如果您有任何问题,请检查并通知我。我想您应该打印
“0b0”
如果
k==0
,而不是
0
。还有,为什么要用printf中的
%d
格式再次进行十进制转换。你有足够的cpu资源浪费吗?@LuisColorado,我只给出了
k==0
,你能再次检查它吗?对于printf,我应该使用什么来
printf(…)
您可以使用
fputc(bin[j-1]?'1':'0',stdout);
这只进行一次布尔测试来选择要打印的字符。在测试
k==0
之前,我没有看到
printf(“0b”);
前缀,因此我为这场火灾道歉。
#include <stdio.h>
int main() {
  int n,i = 0,j=0,k;
  scanf("%d",&n);
  int bin[100];
  // k=n;  // not needed

  // while(n!=0) {
  do {
    bin[i]= n%2;

    // Another simplification
    // n=(n-n%2)/2;
    n /= 2;

    i++;
  } while (n);
  printf("0b");
  for (j=i;j>0;j--) {
    printf("%d",bin[(j-1)]);
  }
}
#include <limits.h>

void print_binary(unsigned x){
    unsigned n=UINT_MAX;

    n = ~(n >> 1);

    while (n){ 
        if (n & x)
            putchar('1');
        else
            putchar('0');
        n = n >> 1;
    }
    putchar('\n');
}