如何在 printf 函数中对齐

how to align in printf function

我想让 printf 函数从右到左打印,因为这个程序将数字的值转换为二进制,我希望它以正确的形式打印,例如,如果我转换 16,它的写法是 00001 但是它必须看起来像 10000 那么有人知道如何做吗 提前谢谢

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

int main()
{
   int x,rem;

   printf("please enter number: ");
   scanf("%d",&x);

   while (x !=0)
   {
       rem=x%2;
       if (rem==0)
       {
           printf("0");
       }
       else
       {
          printf("1");
       }
       x = x/2;
       rem = 0;
   }
   return 0;
}

#include<stdio.h> 
#include<stdlib.h> 
int main() 
{ 
      int binary[20]; 
      int q,i=0;
      printf("Enter the decimal no\n"); 
      scanf("%d",&q); 
      while(q > 0) 
      { 
           binary[i]=q%2; 
           i++; 
           q=q/2;
      }

      for(int j=i-1;j>=0;j--) 
      {
            printf("%d",binary[j]);
      }

return 0;
 }

这里是:

void print_binary(int x)
{
    int skip = 1;
    unsigned int mask = 1 << 31;
    while(mask > 0){
        if(x & mask){
            skip = 0;
            printf("1");
        }else{
            if(!skip) printf("0");
        }
        mask >>= 1;
    }
    printf("\n");
}

这将打印不带尾随零的二进制数。

如果您希望将结果存储在字符串中,您可以使用:

#include <string.h>
void int_to_binary(int x, char * buff) // buff size must be >= 32 !
{
    buff[0] = '[=11=]'; // ensure string ends with [=11=]
    unsigned int mask = 1 << 31;
    for (; mask > 0; mask >>= 1)
    {
        strcat(buff, (x & mask) ? "1" : "0");
    }
}

要检查这两个代码,请使用:

int main(int argc, char* argv[])
{
    int x;
    printf("please enter number: ");
    scanf("%d",&x);
    char bin[32];
    int_to_binary(x, bin);
    printf("%s\n", bin);
    print_binary(x);
}

我们所做的是使用一个掩码,它在二进制中是一个“1”,从最左边开始,在每个循环中向右移动一步。 “&”是一个 bite-wise 运算符(我让您 google 知道它是如何工作的)。如果您需要更多解释,请随时询问。