我写了一个函数来打印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');
}
然而,第二个功能并不起作用。我无法弄清楚原因,因为这两个功能几乎相同!为什么第二个函数不会产生相同的结果?
答案 0 :(得分:14)
运营商precedence。等式运算符(==
)在按位运算(&
)之前排序。
Clang警告如下;
&安培;优先级低于==; ==将首先评估
在您的第二个功能中,将if(mask&c==0)
更改为if((mask&c)==0)