#include <stdio.h>
int main()
{
char ch = 'A';
printf("%c\n", ch);
printf("%d\n", ch);
printf("********************\n");
int num = 66;
printf("%c\n", num);
printf("%d\n", num);
printf("********************\n");
ch = 'a';
printf("%c\n", ch);
printf("%d\n", ch);
printf("********************\n");
num = 100;
printf("%c\n", num);
printf("%d\n", num);
printf("********************\n");
ch = 'B' + 24; // 相当于ch = 'Z';
printf("%c\n", ch);
printf("%d\n", ch);
printf("********************\n");
num = 97 + 25; // 97是'a'
printf("%c\n", num);
printf("%d\n", num);
return 0;
}
运行结果:
A
65
********************
B
66
********************
a
97
********************
d
100
********************
Z
90
********************
z
122
分析: 从程序的运行结果可以看出,字符和整数是对应的。 字符’A’对应于65,’B’对应于66,’C’对应于67,……,’X’对应于88,’Y’对应于89,’Z’对应于90。 ’a’对应于97,’b’对应于98,’c’对应于99,……,’x’对应于120,’y’对应于’121’,’z’对应于122。
为什么会有对应关系呢? 具体原因请参考: ASCII编码简介
#include <stdio.h>
int main()
{
for(char ch = '0'; ch <= '9'; ch++)
{
printf("字符%c <---> 数字%d\n", ch, ch);
}
return 0;
}
运行结果:
字符0 <---> 数字48
字符1 <---> 数字49
字符2 <---> 数字50
字符3 <---> 数字51
字符4 <---> 数字52
字符5 <---> 数字53
字符6 <---> 数字54
字符7 <---> 数字55
字符8 <---> 数字56
字符9 <---> 数字57
分析: 从程序运行结果可以看出,字符‘0’对应于48,‘1’对应于49,‘2’对应于50,‘3’对应于51,‘4’对应于52,‘5’对应于53,‘6’对应于54,‘7’对应于55,‘8’对应于56,‘9’对应于57。
那么字符串“10”对应于数字多少呢?58吗? 不是的。计算机把字符串“10”当成了两个字符:‘1’和‘0’,分别对应49和48。
具体也可查阅ASCII编码简介中的表格。
还有一个问题:当你用键盘输入“0”的时候,计算机怎么知道你输入的是字符还是数字呢? 很简单,看格式化符号,如果是scanf(“%c”, ch),计算机就当做是字符,如果是scanf(“%d”, ch),计算机就当成是数字。 printf(“%c”, ch)和printf(“%d”,ch)也是同样的道理,这从上面的代码就可以看出来。
#include <stdio.h>
int main()
{
char ch = '\0';
printf("%d\n", ch);
ch = ' ';
printf("%d\n", ch);
ch = '\n';
printf("%d\n", ch);
return 0;
}
运行结果:
0
32
10
分析: 从运行可以看出: (1)‘\0’与‘0’是不一样的,因为二者对应的ASCII编码不一样。 ‘\0’对应着0,‘0’对应着48。 ‘\0’代表空字符(NULL),通常用来做为字符串的结束符。 '0'则是字符0或者数字48。
(2)程序里的‘\0’、‘\n’是转义字符。 什么叫转义呢?就是改变原来的意义。 比如‘0’表示字符‘0’,加上斜杆后‘\0’就变成了空字符。 再比如‘n’表示字符‘n’,加上斜杆后‘\n’就变成了换行符。
(3)所有的键盘操作(比如按Enter键进行换行)都对应着一个字符,当然也就对应了一个整数。都可以转化成机器可以认识的二进制。
注意:空格是用字符' '来表示,不是用''来表示,两个单引号之间一定要加个空格,否则会报错。