2012-02-05 55 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