如何在printf函数中对齐

时间:2016-01-25 13:31:10

标签: alignment printf

我想让printf函数从右到左打印,因为这个程序将number的值转换为二进制,我希望它以适当的形式打印,例如,如果我转换为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;
}

enter image description here

2 个答案:

答案 0 :(得分:1)

这是:

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] = '\0'; // ensure string ends with \0
    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”,并在每个循环向右移动一步。 “&amp;”是一个咬一口的运营商(我让你知道它是如何运作的)。如果您需要更多解释,请随时提出。

答案 1 :(得分: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;
 }