2012-02-05 23 views
7

以下程序产出12480作为输出。%c如何在C程序中打印值?

#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。任何人都可以告诉我这是怎么回事!?

回答

7

如果使用%c,c会打印相应的整数值的ASCII码。

的48二进制为110000 的1数字是000001

or他们,110000 | 000001给人110001这相当于49 in decimal base 10

按照ASCII table,对应的ASCII码值49,50,51,等都是 '1', '2', '3' 等

+0

啊!为此非常感谢! – Chandeep 2012-02-05 11:38:50

+0

只是一件事48的二进制是110000而不是110001 – Chandeep 2012-02-05 11:41:53

+0

@ user975234哎呀,我记住了最后的结果,所以错误键入它。 – 2012-02-05 11:47:49

3

它实际上打印出字符'1''2''4'

c|mask的数值被解释为ASCII code。的'0' ASCII码为48

为了使代码更清晰一点,你可以改变

char c=48; 

char c='0'; 

这两种形式是等价的。

+0

谢谢您的回答@aix ..但告诉我如何OR操作正在执行中?我的意思是OR操作是使用48的二进制或0的二进制完成的? – Chandeep 2012-02-05 11:33:38

+1

@ user975234:'48'与'1'进行或运算,给出'49'。当使用'%c'打印'49'时,屏幕上显示'1',因为'49'是字符'1'的ASCII码。 – NPE 2012-02-05 11:38:57