首先请看一下ASCII表
0011 0000 | 060 | 48 | 0x30 | 0 | 字符0 |
0011 0001 | 061 | 49 | 0x31 | 1 | 字符1 |
0011 0010 | 062 | 50 | 0x32 | 2 | 字符2 |
0011 0011 | 063 | 51 | 0x33 | 3 | 字符3 |
0011 0100 | 064 | 52 | 0x34 | 4 | 字符4 |
0011 0101 | 065 | 53 | 0x35 | 5 | 字符5 |
0011 0110 | 066 | 54 | 0x36 | 6 | 字符6 |
0011 0111 | 067 | 55 | 0x37 | 7 | 字符7 |
0011 1000 | 070 | 56 | 0x38 | 8 | 字符8 |
0011 1001 | 071 | 57 | 0x39 | 9 | 字符9 |
我们可以看出从48 - 57 分别代表了字符0到字符1;我们在写字符零的时候会用单引号将其括起来‘0’;这样他就会使用ASCII规则;使其变成字符0,也变成了数字四十八;
请大家看下面这段代码
#include<stdio.h>
#include<stdlib.h>
int main()
{
char *str1 = '0';
char *str2 = '0' - 48;
char *str3 = 48;
printf("字符%c\n", str1);
printf("数字%d\n", str1);
printf("数字%d\n", str2);
printf("字符%c\n", str3);
system("pause");
return 0;
}
输出结果:
可以看出’0‘就是48;只不过不同的输出方式,输出的结果也不相同,如果以%c输出输出的就是’0‘,而以%d输出输出的就是48了。所以当以%d输出时,给’0‘ - 48 就相当于给48-48,那这不就是数字0了吗。