打印char的二进制格式

时间:2014-10-28 08:41:27

标签: c++ c

我写了一个函数来打印char个月之前的二进制格式,就像这样,它运作良好:

void PrnCharBit(char x)
{
        int i,mask;
        for(i=CHAR_BIT;i>=1;i--)
        {
            mask=(1<<(i-1))&x;
            putchar((mask==0)?'0':'1');
        }
        putchar('\n');
}

今天我想使用这个函数,所以我写了一个与上面函数几乎相同的函数:

void PrnCharBit(char c)
{
    int i;
    char mask=0;
    //printf("%d\n",CHAR_MAX);
    for(i=sizeof(char)*CHAR_BIT-1;i>=0;i--)
    {
        mask=1<<i;
        if(mask&c==0) putchar('0');
        else putchar('1');
    }
    putchar('\n');
}

然而,第二个功能并不起作用。我无法弄清楚原因,因为这两个功能几乎相同!为什么第二个函数不会产生相同的结果?

1 个答案:

答案 0 :(得分:14)

运营商precedence。等式运算符(==)在按位运算(&)之前排序。

Clang警告如下;

  

&安培;优先级低于==; ==将首先评估

在您的第二个功能中,将if(mask&c==0)更改为if((mask&c)==0)