2012-02-05 12 views
7

Chương trình sau đây mang lại 12480 làm đầu ra.% c in giá trị trong chương trình C như thế nào?

#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; 
} 

Bây giờ, câu hỏi của tôi là, cách "% c" in giá trị số nguyên 1, 2, 4, 8, 0 sau mỗi vòng lặp. Nó sẽ in một ký tự dưới dạng giá trị. Nếu tôi chỉ cần sử dụng chương trình sau,

#include<stdio.h> 

int main() 
{ 
    char c=48; 
    int i, mask=01; 
    printf("%c",c); 
    return 0; 
} 

nó in 0 nhưng khi tôi thay đổi số nhận dạng% c thành% d nó in 48. Bất cứ ai có thể xin vui lòng cho tôi biết làm thế nào là điều này sẽ !?

Trả lời

7

Nếu bạn sử dụng %c, c sẽ in khóa ASCII tương ứng cho giá trị số nguyên.

Binary 48 là 110000. Binary trong tổng số 1 là 000001.

Bạn or họ, 110000 | 000001 cho 110001 tương đương với 49 in decimal base 10.

Theo ASCII table, tương ứng với giá trị ascii 49, 50, 51, vv là '1', '2', '3', vv

+0

Ah! Cảm ơn rất nhiều vì điều đó! – Chandeep

+0

chỉ là một điều nhị phân của 48 là 110000 không 110001 – Chandeep

+0

@ user975234 Rất tiếc, tôi đã có kết quả cuối cùng trong tâm trí, do đó, gõ sai nó. –

3

Nó thực sự in ra ký tự'1', '2', '4', vv

Giá trị số của c|mask được hiểu như là một ASCII code. Các mã ASCII của '0' là 48.

Để làm cho đoạn code rõ ràng hơn một chút, bạn có thể thay đổi

char c=48; 

để

char c='0'; 

Hai hình thức là tương đương.

+0

nhờ cho @aix câu trả lời của bạn .. nhưng cho tôi biết thế nào hoạt động OR đang được thực hiện? Tôi có nghĩa là hoạt động OR được thực hiện bằng cách sử dụng nhị phân của 48 hoặc nhị phân của 0? – Chandeep

+1

@ user975234: '48' được ORED với' 1', cho '49'. Khi bạn in ra '49' bằng cách sử dụng'% c', bạn nhận được '1' trên màn hình, vì' 49' là mã ASCII của ký tự ''1''. – NPE

Các vấn đề liên quan