对于这个程序 我一直有疑惑
#include<stdio.h>
int main()
{
char a;
scanf("%c", &a);
if (a>='A' && a <= 'Z')
printf("%c", a+32);
else
printf("%c", a-32);
return 0;
}
这里的a倒是是怎么与'A'比较的呢?
查阅资料 ,其实char类型从技术层面上来看,是整数类型。因为char类型实际上存储的是整数而不是字符(见Cprime Plus 第44页3.4.3)
说到这里,不禁要讲这么个思想:就是说在电脑里数据都是以二进制储存,你怎么看待他,那么它就是什么。
这里写个程序
char a=99 如果让ta以整数输出(%d)那么 输出结果为99
如果要让ta以字符形式输出(%c)那么 输出结果为c
再看int b =99 分别以整数 和 字符形式输出 结果为99 c
所以还是那句话 ,99是99 ,但是你看待它的方式不一样那么结果就不一样 。可以是99 可以是c
About ' '
一个数字比如说 1 加上了单引号 '1'那么它就是一个字符
在ASCII码表里 '1' 的十进制表示是 49
我们通过程序来理解一下
#include <stdio.h>
int main()
{
char a = '1';
char b = 49;
printf("%d %c %o", a, b,a);
return 0;
}
以%d输出'1' 得到结果是49
以%o输出'1'得到结果是61(八进制) 当然,还可以用16进制输出,自然得到的结果是31
把49以%c输出 得到结果是1。
所以回到最开始的问题,(这里的a倒是是怎么与'A'比较的呢?)a既然是字符,又怎么加32的呢?
在这里我们不妨大胆假设,在运算过程中,是整数运算。
Debug 一下 可以看到值 那一列 是97'a' 转化成了整数。 整数之间进行比较。