- 零基础学C++(升级版)
- 明日科技编著
- 2494字
- 2024-05-14 10:30:59
2.2 常量及符号
![](https://epubservercos.yuewen.com/D77079/29142624407383406/epubprivate/OEBPS/Images/42276_30_2.jpg?sign=1739039342-gTan4RL76GTPBiFWmYTfWvD5Fpp8waPA-0-df9c8306230be06ed267715ac9cb54dc)
视频讲解
视频讲解:资源包\Video\02\2.2常量及符号.mp4
常量就是其值在程序运行过程中不可以改变的量。例如,我们每个人的身份证号码就是一个常量,是不能被更改的。常量可分为整型常量、实型常量、字符常量和字符串常量。
![](https://epubservercos.yuewen.com/D77079/29142624407383406/epubprivate/OEBPS/Images/42276_30_4.jpg?sign=1739039342-7yL6j2q13w92OFlhwne2n6dMF2PsrCby-0-a3478acdeff55dfc046c3bbae38178a3)
上面的代码通过cout向屏幕输出4行内容。cout是输出流,实现向屏幕输出不同类型的数据。代码中的2009是整型常量,2.14是实型常量,'a'是字符常量,"HelloWorld"是字符串常量。
2.2.1 整型常量
整型常量就是指直接使用的整型常数,例如0、100、-200等。
整型常量的数据类型可以分为长整型、短整型(有符号和无符号)、有符号整型和无符号整型。如表2.1所示,这几种数据类型如同容积大小不同的烧杯,虽然用法一样,但在不同的场景中就使用不同容量的烧杯。
表2.1 整型常量的数据类型
![](https://epubservercos.yuewen.com/D77079/29142624407383406/epubprivate/OEBPS/Images/42276_30_5.jpg?sign=1739039342-4B1rccRYlo49GRJh334QJNWt4cg6FOU0-0-94d12266f9bd454b1fb734b3a98b1f12)
说明
根据不同的编译器,整型的取值范围是不一样的。还有可能的是,在16位的计算机中整型就为16位,在32位的计算机中整型就为32位。
在编写整型常量时,可以在常量的后面加上“L”或者“U”符号进行修饰。其中,“L”表示该常量是长整型的,“U”表示该常量是无符号整型的。例如:
![](https://epubservercos.yuewen.com/D77079/29142624407383406/epubprivate/OEBPS/Images/42276_31_1.jpg?sign=1739039342-gSBMQlNh6bG8qI3LZPFLNpwhZ3M7ujvm-0-903f6e973c7d19b3f6aca045bba34658)
说明
表示长整型和无符号整型的后缀字母“L”和“U”可以使用大写的,也可以使用小写的。
所有整型常量的类型也可以通过3种形式进行表达,分别为八进制形式、十进制形式和十六进制形式。下面分别进行介绍。
1.八进制整数
使用八进制形式表达数据,需要在常量前面加上一个0进行修饰。八进制整数所包含的数字是0~7。例如:
![](https://epubservercos.yuewen.com/D77079/29142624407383406/epubprivate/OEBPS/Images/42276_31_3.jpg?sign=1739039342-vJx6e02HP3Cclos2Nmv9ixWEE7igowYx-0-a3231c5c615070f5fbc88f712990b834)
以下是八进制形式的错误写法:
![](https://epubservercos.yuewen.com/D77079/29142624407383406/epubprivate/OEBPS/Images/42276_31_4.jpg?sign=1739039342-0yNftMKitiHnSAuOf7r7NCuWStpCT7Es-0-5a6124ebab40ba06b73e17cd9223b147)
2.十六进制整数
在常量前面使用0x作为前缀(注意:0x中的0是数字0,而不是字母O),表示该常量是十六进制形式的。十六进制整数中包含数字0~9以及字母A~F。例如:
![](https://epubservercos.yuewen.com/D77079/29142624407383406/epubprivate/OEBPS/Images/42276_31_5.jpg?sign=1739039342-XZIwkMV4dCsy0cBccBQ1WZAuGO6RvZUJ-0-ba080e34081825c1383cc7ff878687d8)
说明
其中字母A~F可以使用大写形式,也可以使用a~f小写形式。
3.十进制整数
十进制形式是不需要在常量前面添加前缀的。十进制整数中所包含的数字为0~9。例如:
![](https://epubservercos.yuewen.com/D77079/29142624407383406/epubprivate/OEBPS/Images/42276_31_7.jpg?sign=1739039342-DYtrhK19mmkho7SajFqdXxqCEKh5shXl-0-d06e1ce0b47c8a3183d3657bb98f1632)
整型数据都是以二进制形式存放在计算机内存中的,其数值以补码的形式进行表示。正数的补码与其原码的形式相同,负数的补码是将该数绝对值的二进制形式按位取反再加1。例如,十进制数11在内存中的表现形式如图2.5所示。
![](https://epubservercos.yuewen.com/D77079/29142624407383406/epubprivate/OEBPS/Images/42276_31_8.jpg?sign=1739039342-hQDbVIe17kBbQQvVSu9uK4ArrPSXZmIg-0-2af19e224ef39eed604d66b7ac0dad29)
图2.5 十进制数11在内存中的表现形式
如果是-11,那么在内存中又是怎样表现的呢?因为数值是以补码形式进行表示的,所以对于负数,要先求出其绝对值,然后进行取反操作,如图2.6所示,得到取反后的结果。
![](https://epubservercos.yuewen.com/D77079/29142624407383406/epubprivate/OEBPS/Images/42276_32_1.jpg?sign=1739039342-IpSKOb5uFM14S8U6E31VRurLAfmBbdkf-0-7abd2d5f180a674d6236399123ca9ecd)
图2.6 取反操作
取反之后还要进行加1操作,这样就得到最终的结果。例如,-11在计算机内存中的存储情况如图2.7所示。
![](https://epubservercos.yuewen.com/D77079/29142624407383406/epubprivate/OEBPS/Images/42276_32_2.jpg?sign=1739039342-fIuS1WqxvoP1G0xnldo6qxpxDZOXYN1b-0-db5036f9607813863301983d1a694316)
图2.7-11在计算机内存中的存储情况
说明
对于有符号整数,其在内存中存储的最左边一位表示符号位,如果该位为0,则说明该数为正数;如果该位为1,则说明该数为负数。
2.2.2 实型常量
实型也称为浮点型,实型常量是由整数部分和小数部分组成的,它们之前用十进制形式的小数点隔开。例如,超市小票中的应收金额就是实型常量数据,如图2.8所示。
![](https://epubservercos.yuewen.com/D77079/29142624407383406/epubprivate/OEBPS/Images/42276_32_4.jpg?sign=1739039342-anxHghfiad1uPuP2R7XHHtfdVK8EzdWu-0-fd3244f180f5ca9b3b636673823e71ab)
图2.8 实型常量数据
在C++语言中表示实型常量的方式有以下两种。
1.科学计数方式
科学计数方式就是使用十进制形式的小数方法描述实型常量。例如:
![](https://epubservercos.yuewen.com/D77079/29142624407383406/epubprivate/OEBPS/Images/42276_32_5.jpg?sign=1739039342-Af6WVD5QtKHAQ4Rp1dJndkSzyhQqn5LG-0-7fc0c502d6779c25ec8c744e42928b46)
2.指数方式
有时实型常量非常大或者非常小,使用科学计数方式不利于观察,这时就可以使用指数方式表示实型常量。其中,使用字母e或者E进行指数显示,如514e2表示的是51400,而514e-2表示的是5.14。比如SciNum1和SciNum2代表实型常量,使用指数方式显示这两个实型常量如下:
![](https://epubservercos.yuewen.com/D77079/29142624407383406/epubprivate/OEBPS/Images/42276_33_1.jpg?sign=1739039342-oQufhry5CrXeHwM1MUAUhPOuMrR6nbaT-0-05df0cdd801455fb85809c9e64632dc8)
在编写实型常量时,可以在常量后面加上“F”或者“L”符号进行修饰。其中,“F”表示该常量是单精度类型(float)的,L表示该常量是长双精度类型(long double)的。例如:
![](https://epubservercos.yuewen.com/D77079/29142624407383406/epubprivate/OEBPS/Images/42276_33_2.jpg?sign=1739039342-S2f05sLQqiOyIYQ2tldJp6CK7dCUt1JU-0-219dddc2ccad067d4a67b5c6811cde0b)
注意
如果不在常量后面加上后缀,则默认实型常量是双精度类型(double)的。在常量后面添加的后缀不区分大小写,即大小写是通用的。
2.2.3 字符常量
字符常量是指用单引号括起来的一个字符。例如,'a'和'?'都是合法的字符常量。在编译代码时,编译器会根据ASCII码表将字符常量转换成整型常量。例如,字符'a'的ASCII码值是97,字符'A'的ASCII码值是65,字符'?'的ASCII码值是63。ASCII码表中还有很多通过键盘无法输入的字符,我们可以使用“\ddd”或“\xhh”来引用这些字符。其中,“\ddd”是1~3位八进制数所代表的字符,“\xhh”是1~2位十六进制数所代表的字符。例如,“\101”表示ASCII码“A”,“\XOA”表示换行等。
示例:转义字符应用。
![](https://epubservercos.yuewen.com/D77079/29142624407383406/epubprivate/OEBPS/Images/42276_33_4.jpg?sign=1739039342-OqaYAiqwf2lsAFdHvEcSXGkmjpZoTDNu-0-bf906130db3912e161b0fdce4f287c84)
示例运行结果如图2.9所示。
![](https://epubservercos.yuewen.com/D77079/29142624407383406/epubprivate/OEBPS/Images/42276_33_5.jpg?sign=1739039342-6Q2tgo1iu17E1lM7YSZx5qMCjwDK4suK-0-c73a3585ee63925bb64d27cedecd0d17)
图2.9 示例运行结果
转义字符是特殊的字符常量,使用时以字符“\”(代表开始转义)和后面不同的字符表示转义后的字符。转义字符如表2.2所示。
表2.2 转义字符
![](https://epubservercos.yuewen.com/D77079/29142624407383406/epubprivate/OEBPS/Images/42276_34_1.jpg?sign=1739039342-I4bIltdpLsyzNboL26z0QaMfEWWAigvA-0-afa143da62ec4615a5f11f3aebbfc929)
2.2.4 字符串常量
字符串常量是指用双引号括起来的若干字符序列。例如,"ABC"、"abc"、"1314"、"您好"等都是正确的字符串常量。
如果字符串中一个字符都没有,则将其称为空字符串,此时字符串的长度为0。例如""。
在C++中存储字符串常量时,系统会在字符串的末尾自动加上“\0”作为字符串的结束标志。例如,字符串"welcome"在内存中的存储形式如图2.10所示。
![](https://epubservercos.yuewen.com/D77079/29142624407383406/epubprivate/OEBPS/Images/42276_34_2.jpg?sign=1739039342-EiaODO3fgOiqPnPCBopRElDekPuD2a68-0-88e20cc3b50318fb01dc5931d29e9cd5)
图2.10 字符串"welcome"在内存中的存储形式
注意
在程序中编写字符串常量时,不必在一个字符串的结尾处加上结束标志“\0”,系统会自动添加结束标志。
上面介绍了有关字符常量和字符串常量的内容,那么它们之间有什么区别呢?它们之间的区别具体体现在以下几个方面:
(1)定界符不同。字符常量使用的是单引号,而字符串常量使用的是双引号。
(2)长度不同。上面提到过,字符常量只能有一个字符,也就是说,字符常量的长度就是1。而字符串常量的长度可以是0。但需要注意的是,即使字符串常量中的字符只有1个,其长度也不是1。例如字符串常量"H",其长度为2。通过图2.11可以了解到字符串常量"H"的长度为2的原因。
![](https://epubservercos.yuewen.com/D77079/29142624407383406/epubprivate/OEBPS/Images/42276_34_4.jpg?sign=1739039342-O2GPCtG8YnUlgL3CqYWQFpbOUHZpY113-0-2226d69939d88c44562804ff0a85ef17)
图2.11 字符串常量"H"在内存中的存储形式
(3)存储方式不同,在字符常量中存储的是字符的ASCII码值,如'A'为65,'a'为97;而在字符串常量中,不仅要存储有效的字符,还要存储结尾处的结束标志“\0”。
说明
系统会自动在字符串的尾部添加结束标志“\0”,这也是字符串常量"H"的长度为2的原因。
2.2.5 其他常量
前面讲到的都是普通的常量,其实常量还包括布尔(bool)常量、枚举常量、宏定义常量等。
☑ 布尔常量:布尔常量只有两个,其中一个是true,表示真;另一个是false,表示假。
☑ 枚举常量:在枚举类型数据中定义的成员也都是常量,这将在后文中介绍。
☑ 宏定义常量:通过#define宏定义的一些值也是常量。例如:
![](https://epubservercos.yuewen.com/D77079/29142624407383406/epubprivate/OEBPS/Images/42276_35_2.jpg?sign=1739039342-itdJAhborEE3NXs8OBsaqSihbxCRZ16B-0-29d3991f412db78931771c8d10af97ea)
其中,PI就是常量。