2012-02-05 13 views
7

Poniższy program daje 12480 jako wynik.jak% c drukuje wartości w programie 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; 
} 

Teraz moje pytanie brzmi, w jaki sposób "% c" drukuje liczbę całkowitą 1, 2, 4, 8, 0 po każdej pętli. Powinien wydrukować znak jako wartość. Jeśli po prostu używam poniższego programu, to drukuje on 0, ale gdy zmieniam identyfikator% c na% d, drukuje 48. Czy ktoś może mi powiedzieć, jak to się dzieje !?

Odpowiedz

7

Jeśli użyjesz %c, c wypisze odpowiedni klucz ASCII dla wartości całkowitej.

Binary od 48 110000. binarne 1 jest 000001.

Ty or im, 110000 | 000001 daje 110001 co odpowiada 49 in decimal base 10.

Według ASCII table, co odpowiada wartości ASCII dla 49, 50, 51, etc są '1', '2', '3', itp

+0

Ah! Wielkie dzięki za to! – Chandeep

+0

tylko jedna rzecz binarna z 48 to 110000 nie 110001 – Chandeep

+0

@ user975234 Ups, Miałem ostateczny wynik na uwadze, więc błędnie go. –

3

To faktycznie wypisuje znaki'1', '2', '4' itp

Wartość liczbowa c|mask zostanie zinterpretowane jako ASCII code. Kod ASCII '0' jest 48.

aby kod trochę jaśniejsze, można zmienić

char c=48; 

do

char c='0'; 

Obie formy są równoważne.

+0

dzięki za odpowiedź @aix .. ale powiedz mi, jak czy wykonywana jest operacja LUB? Chodzi mi o to, czy operacja OR jest wykonywana przy użyciu binarnych binarnych 48 czy 0? – Chandeep

+1

@ user975234: '48' otrzymuje ORed z' 1', podając '49'. Kiedy drukujesz '49' używając'% c', dostajesz '1' na ekranie, ponieważ' 49' jest kodem ASCII znaku ''1''. – NPE

Powiązane problemy