为什么在以下示例中仅使用最后4位?

时间:2017-05-31 16:22:24

标签: c printf

#include<stdio.h>
int main()
{
   char c=48;
   int i, mask=01;

   for(i=1; i<=5; i++)
   {
       printf("%c", c|mask);
       mask = mask<<1;
   }
   return 0;
}

我正在学习考试,这是一个解决的练习,答案是:12480,因为%c只占最后4位。我不明白为什么,因为我知道sizeof char是1个字节。

3 个答案:

答案 0 :(得分:2)

让我们看看48的二进制表示:

2^ 7 6 5 4 3 2 1 0
   ---------------
   0 0 1 1 0 0 0 0

未设置最后4位。在循环的前4次迭代中,掩码设置结果中的其中一个位,结果反映了更改。在最后一次迭代中,掩码设置了一个已设置的位,因此打印的最后一个字符没有变化。

至于打印的内容,ASCII 48是0的字符代码。在那之后,以下数字是有序的。当您屏蔽前4次迭代的值时,因为值48中的所有位都未在掩码中设置,所以它实际上与添加相同。因此,打印的前4个字符的ASCII值为49(1),50(2),52(4)和56(8)。

答案 1 :(得分:1)

字符代码48通常为0。当它或一个,它打印数字1.然后它打印数字2,4,8。最后,48 | 16 = 48,所以它打印0。

答案 2 :(得分:0)

这需要他们所有,但是最后一次你或那个1已经是1(48是二进制110000)