2.3.2 字符型常量
用一对单引号括起来的一个或多个字符称为字符型常量,如'A'、'AA'、'\n'和'5'等,其中'A'、'?'和'5'称为单字符常量,'AA'称为双字符常量,'\n'称为转义字符序列。
由代码2.4可以看出,对双字符常量来说,系统将其解释为一个int类型的数据,前面的字符作为低位字节,后面的字符作为高位字节,这种方式仅适用于可显示字符。
代码2.4 单字符常量和双字符常量的用法CharSample1
<——————————————文件名:example204.cpp—————————————> 01 #include<iostream> 02 int main() 03 { 04 using namespace std; 05 cout<<"\'A\'is"<<'A'<<endl;//单字符常量'A' 06 cout<<"\'B\'is"<<'B'<<endl;//单字符常量'B' 07 cout<<"\'AB\'is"<<'AB'<<endl;//双字符常量'AB' 08 return 0; 09 }
【代码解析】代码第7行就是输出双字符常量'AB'的值。
输出结果为:
'A'is A 'B'is B 'AB'is 16706
同样可以使用“'ABA'”和“'ABAB'”这样的形式,唯一的限制来自于int的字节数,对有些系统来说,int型占两个字节,则“'ABA'”和“'ABAB'”不合法,对int类型占4个字节的系统来说,“'ABA'”和“'ABAB'”完全可用。但不管对什么样的系统,“'ABABA'”及更多字母组合的写法都是错误的。
注意
多字符常量除了增加程序阅读难度外,似乎没有其他的好处,不推荐使用。
字符型常量在C++中可作为单字节的整型常量来使用,因此字符型常量有其对应的八进制、十进制和十六进制的形式,见示例代码2.5。
代码2.5 字符型常量的数值形式CharSample2
<———————————————-文件名:example205.cpp———————————-> 01 #include<iostream> 02 int main() 03 { 04 using namespace std; 05 char letter1='A'; 06 char letter2=65;//十进制 07 char letter3=0101;//八进制 08 char letter4=0X41;//十六进制 09 cout<<"letter1 is"<<letter1<<endl; 10 cout<<"letter2 is"<<letter2<<endl; 11 cout<<"letter3 is"<<letter3<<endl; 12 cout<<"letter4 is"<<letter4<<endl; 13 return 0; 14 }
【代码解析】代码第7行,是使用八进制数来给变量letter3赋值,其值为65,即字符'A'。
输出结果如下所示。
letter1 is A letter2 is A letter3 is A letter4 is A
有的读者会有这样的疑问,代码2.5中的65、0101、0X41到底是字符呢,还是数呢?一般情况下,这些都是数,只有在对字符型变量赋值时,才代表对应的ASCII字符。但是,如果对字符型进行算术运算,实际上是对字符代表的数值进行操作,如代码2.6所示。
代码2.6 字符型的算术运算CharSample3
<—————————————-文件名:example206.cpp—————————————-> 01 #include<iostream> 02 int main() 03 { 04 using namespace std; 05 char letter1='A'; 06 char letter2='A'+2;//字符型常量被当成数值来运算 07 cout<<"letter1+2 is"<<(letter1+2)<<endl;//输出表达式(letter1+2)时, 08 //输出的是数值而不是字符 09 cout<<"letter2 is"<<letter2<<endl;//输出字符 10 return 0; 11 }
【代码解析】代码第6行,是将字符常量'A'当成数字(65)来运算(增加2),变成67赋值给变量letter2,即数值67,用字符'C'表示。
输出结果如下所示。
letter1+2 is 67 letter2 is C
在代码2.6中,对字符型常量'A'进行加2操作,实际上对数值65加2,只有在对字符型变量letter2赋值时,67('A'+2)才被当做字符('C')对待,否则,输出结果是个数值。
此外,字符型常量还可以通过转义代码来表示,反斜杠后给一个八进制或十六进制的ASCII代码,用单引号括起来,表示ASCII表中与代码对应的值,如'A'又可表示成'\0101'(八进制)或'\0X41'(十六进制)。
注意
使用转义代码表示字符常量时,代码数值不能超出char类型表示的范围。