几个月前,我写了一个函数来打印 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');
}
然而,第二个函数没有起作用。我不知道为什么,因为这两个函数几乎是相同的!为什么第二个函数没有产生相同的结果?
std::cout << std::bitset<CHAR_BIT>(c);
的含义是将变量 c 转换成二进制,并输出到控制台。 - user657267& 的优先级低于 ==;== 将首先被评估
- 在您的第二个函数中,将if(mask&c==0)
更改为if((mask&c)==0)
。 - Niallsizeof(char)
的值为1(不考虑底层平台)。 - barak manos