【问题标题】:how to align in printf function如何在 printf 函数中对齐
【发布时间】:2016-01-25 23:07:14
【问题描述】:

我想让 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;
}

【问题讨论】:

    标签: alignment printf


    【解决方案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”,从最左边开始,在每个循环中向右移动一步。 “&”是一个咬合操作符(我让你用谷歌搜索它以了解它是如何工作的)。如果您需要更多解释,请随时提出。

    【讨论】:

    • 感谢您的帮助,我知道我在嵌入式 C 中使用它来访问引脚的位掩码和按位运算:)
    【解决方案2】:
    #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;
     }
    

    【讨论】:

    • 请在堆栈溢出时正确缩进您的代码。
    • @Shitsu:对不起,我刚刚编译并编辑了我的代码。
    猜你喜欢
    • 1970-01-01
    • 2013-04-04
    • 2014-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多