在c中打印二进制字符

时间:2013-09-02 06:15:47

标签: c

我不能,因为爱自己弄清楚这个C代码背后的逻辑。

据推测,以下内容应该打印出unsigned char x的二进制表示,我们只允许填空。

void print_binary(unsigned char x) {
    int b = 128;

    while (__________________) {

        if (b <= x) {
            x -= b;
            printf("1");
        } else
            printf("0");

        ______________________;
    }
}

当然,我可以通过忽略上面的线来游戏程序。但是我的印象是,这不是真正做事的方式(更多的是黑客攻击)。

我的意思是现在,第一个条件检查128是否是&lt; = char,但是不是unsigned char,是什么,255个字节?那么为什么它只打印'1'。

也许我错过了一些非常明显的东西(不是真正的程序员),但这次逻辑并没有沉入我的内心。

有人能指出我正确的方向吗?如果你能在没有完全说出答案的情况下给我一个线索,那将是天堂般的。

3 个答案:

答案 0 :(得分:3)

void print_binary(unsigned char x) {
    int b = 128;

    while (b != 0) {

        if (b <= x) {
            x -= b;
            printf("1");
        } else
            printf("0");

        b = b >> 1;
    }
}

b的二进制表示是10000000。通过执行b >> 1并检查b <= x,我们可以检查x上的每个位是1还是0

答案 1 :(得分:1)

你只想知道:当前位的值总是大于它之后的较低有效位的组合。因此,代码尝试在每次循环迭代时仅测试最重要的“1”位。

答案 2 :(得分:0)

如果我们忽略原始代码,最直观的方法是:

void print_binary (uint8_t x) 
{
  for(uint8_t mask=0x80; mask!=0; mask>>=1)
  {
    if(x & mask)
    {
      printf("1");
    }
    else
    {
      printf("0");
    }
  }
  printf("\n");
}