以下程序产生12480作为输出。
#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;
}
现在,我的问题是,“%c”在每次循环后如何打印整数值1,2,4,8,0。它应该打印一个字符作为值。如果我只是使用以下程序,
#include<stdio.h>
int main()
{
char c=48;
int i, mask=01;
printf("%c",c);
return 0;
}
它打印0但是当我将标识符%c更改为%d时它打印48。任何人都可以告诉我这是怎么回事!?
答案 0 :(得分:7)
如果使用%c
,c将打印相应的ASCII键作为整数值。
48的二进制数是110000。 二进制1是000001。
您or
他们,110000 | 000001
提供的110001
相当于49 in decimal base 10
。
根据ASCII table,49,50,51等的相应ascii值是&#39; 1&#39;,&#39; 2&#39;,&#39; 3&#39;等等。
答案 1 :(得分:3)
它实际打印出字符 '1'
,'2'
,'4'
等。
c|mask
的数值被解释为ASCII code。 '0'
的ASCII码为48。
为了使代码更清晰,您可以更改
char c=48;
到
char c='0';
这两种形式是等效的。