![零基础学C++(升级版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/660/49639660/b_49639660.jpg)
2.2 常量及符号
![](https://epubservercos.yuewen.com/D77079/29142624407383406/epubprivate/OEBPS/Images/42276_30_2.jpg?sign=1739259915-HxGRQ7zNYKJJ2uk9Oka0tf2qLR9JrfXp-0-9ee47e764de02a2c4a6283633a2bb185)
视频讲解
视频讲解:资源包\Video\02\2.2常量及符号.mp4
常量就是其值在程序运行过程中不可以改变的量。例如,我们每个人的身份证号码就是一个常量,是不能被更改的。常量可分为整型常量、实型常量、字符常量和字符串常量。
![](https://epubservercos.yuewen.com/D77079/29142624407383406/epubprivate/OEBPS/Images/42276_30_4.jpg?sign=1739259915-ShqFDIC78sbKaww6M5dzLPNgPjHm2hab-0-c6a17b235164bce35b59cc1a1cd39814)
上面的代码通过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=1739259915-82qewh1aoTamDJqZ83jf0ufmC0LLneCz-0-113623ce68435e5bfbf48710c0ff2737)
说明
根据不同的编译器,整型的取值范围是不一样的。还有可能的是,在16位的计算机中整型就为16位,在32位的计算机中整型就为32位。
在编写整型常量时,可以在常量的后面加上“L”或者“U”符号进行修饰。其中,“L”表示该常量是长整型的,“U”表示该常量是无符号整型的。例如:
![](https://epubservercos.yuewen.com/D77079/29142624407383406/epubprivate/OEBPS/Images/42276_31_1.jpg?sign=1739259915-yRBSXq0BEbdJ303RKg1pGCeq1XheIGl9-0-c46d953e73938e81c42c9695bd3e2f4a)
说明
表示长整型和无符号整型的后缀字母“L”和“U”可以使用大写的,也可以使用小写的。
所有整型常量的类型也可以通过3种形式进行表达,分别为八进制形式、十进制形式和十六进制形式。下面分别进行介绍。
1.八进制整数
使用八进制形式表达数据,需要在常量前面加上一个0进行修饰。八进制整数所包含的数字是0~7。例如:
![](https://epubservercos.yuewen.com/D77079/29142624407383406/epubprivate/OEBPS/Images/42276_31_3.jpg?sign=1739259915-2zyF4t5L6VGQnjkiHOoZsxI6tewyNLaa-0-1f8563d5c24c883ae4ea98d66898a12e)
以下是八进制形式的错误写法:
![](https://epubservercos.yuewen.com/D77079/29142624407383406/epubprivate/OEBPS/Images/42276_31_4.jpg?sign=1739259915-tBEcSiUkKodq35RlwT0wlo3GtllTgOG0-0-9ce1b9e2bb1f327f0049bca41aa9f061)
2.十六进制整数
在常量前面使用0x作为前缀(注意:0x中的0是数字0,而不是字母O),表示该常量是十六进制形式的。十六进制整数中包含数字0~9以及字母A~F。例如:
![](https://epubservercos.yuewen.com/D77079/29142624407383406/epubprivate/OEBPS/Images/42276_31_5.jpg?sign=1739259915-Zh3t5DOjbr80GSffYP2q5O0tBA5DlrYS-0-b380da47425499d8c102c04c07d19bce)
说明
其中字母A~F可以使用大写形式,也可以使用a~f小写形式。
3.十进制整数
十进制形式是不需要在常量前面添加前缀的。十进制整数中所包含的数字为0~9。例如:
![](https://epubservercos.yuewen.com/D77079/29142624407383406/epubprivate/OEBPS/Images/42276_31_7.jpg?sign=1739259915-Z8MF7fwZzXziZWBPjiOp6Q5rVLLBWCO0-0-9bcbd994d698d629f975137630e8dc7f)
整型数据都是以二进制形式存放在计算机内存中的,其数值以补码的形式进行表示。正数的补码与其原码的形式相同,负数的补码是将该数绝对值的二进制形式按位取反再加1。例如,十进制数11在内存中的表现形式如图2.5所示。
![](https://epubservercos.yuewen.com/D77079/29142624407383406/epubprivate/OEBPS/Images/42276_31_8.jpg?sign=1739259915-kQ5nnVWyY2txVFROCjYzHaGUdTTpNhJJ-0-ac22b072392c4cbdbbce9d3112dc2197)
图2.5 十进制数11在内存中的表现形式
如果是-11,那么在内存中又是怎样表现的呢?因为数值是以补码形式进行表示的,所以对于负数,要先求出其绝对值,然后进行取反操作,如图2.6所示,得到取反后的结果。
![](https://epubservercos.yuewen.com/D77079/29142624407383406/epubprivate/OEBPS/Images/42276_32_1.jpg?sign=1739259915-5kdu9JAueNP6YFYp70jKbKwSQPIzVpZp-0-d1f52d80045c84d42866f66b1096efa1)
图2.6 取反操作
取反之后还要进行加1操作,这样就得到最终的结果。例如,-11在计算机内存中的存储情况如图2.7所示。
![](https://epubservercos.yuewen.com/D77079/29142624407383406/epubprivate/OEBPS/Images/42276_32_2.jpg?sign=1739259915-XMI5lVIkpDe2RCfy0iQDvXJE53Ktnle0-0-209e040e8cde00fba02289611c46a6f8)
图2.7-11在计算机内存中的存储情况
说明
对于有符号整数,其在内存中存储的最左边一位表示符号位,如果该位为0,则说明该数为正数;如果该位为1,则说明该数为负数。
2.2.2 实型常量
实型也称为浮点型,实型常量是由整数部分和小数部分组成的,它们之前用十进制形式的小数点隔开。例如,超市小票中的应收金额就是实型常量数据,如图2.8所示。
![](https://epubservercos.yuewen.com/D77079/29142624407383406/epubprivate/OEBPS/Images/42276_32_4.jpg?sign=1739259915-VTEC2TUhQpQYzysKcB8F8Ckz6bcR1Epp-0-3f762c1cb49baebc7bbbe2e37a068a4c)
图2.8 实型常量数据
在C++语言中表示实型常量的方式有以下两种。
1.科学计数方式
科学计数方式就是使用十进制形式的小数方法描述实型常量。例如:
![](https://epubservercos.yuewen.com/D77079/29142624407383406/epubprivate/OEBPS/Images/42276_32_5.jpg?sign=1739259915-KuAVOTYVYsE7UeINi1OgeG2Ir8rEfsWg-0-15e8ef6ab1503e7eeb344b1f13a7d15c)
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=1739259915-ZaqDzOJgojqMAESG9n1o00wOeA0cXd8r-0-d8ee49d075c6cb8fcb04c9cb30a980ab)
在编写实型常量时,可以在常量后面加上“F”或者“L”符号进行修饰。其中,“F”表示该常量是单精度类型(float)的,L表示该常量是长双精度类型(long double)的。例如:
![](https://epubservercos.yuewen.com/D77079/29142624407383406/epubprivate/OEBPS/Images/42276_33_2.jpg?sign=1739259915-f3zYmUdCX2LnIouZFYyuP0jL356ec7up-0-d640214375a54088b85fa59ac04a9617)
注意
如果不在常量后面加上后缀,则默认实型常量是双精度类型(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=1739259915-igxhvUvghRKdkeiO9PEcRA8iio4pCGNN-0-84b929a380e83494b557050626bd5a79)
示例运行结果如图2.9所示。
![](https://epubservercos.yuewen.com/D77079/29142624407383406/epubprivate/OEBPS/Images/42276_33_5.jpg?sign=1739259915-pQg5nYt9MGkza59g2lkdHrxyZvK8tCfA-0-fac074eec36f693d9485937d5ed21500)
图2.9 示例运行结果
转义字符是特殊的字符常量,使用时以字符“\”(代表开始转义)和后面不同的字符表示转义后的字符。转义字符如表2.2所示。
表2.2 转义字符
![](https://epubservercos.yuewen.com/D77079/29142624407383406/epubprivate/OEBPS/Images/42276_34_1.jpg?sign=1739259915-3HCSjLn505ai74ot07jdanrCAPUokiqd-0-fbb4956be3e2727900a0dd9e5753e02a)
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=1739259915-WkJj8zF2obtHVKc0iR1nxyM3vX2uJxD8-0-42c1e7a42e27a37dce602f6e9d00e6bb)
图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=1739259915-x6QXBfCNabmwuwyA2LgEi8zLujwzd9Lv-0-c7a740e23ba1c7973e0d8d369729452e)
图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=1739259915-tr3VTMUzCC6LfCUe4jWAaocWj3JwJmKn-0-5c3c0d5ea1c3c80792435643c21a11e5)
其中,PI就是常量。