![C++编程入门指南(全2册)](https://wfqqreader-1252317822.image.myqcloud.com/cover/112/47379112/b_47379112.jpg)
2.2 常量与符号
![](https://epubservercos.yuewen.com/5F7BC7/26764105801618006/epubprivate/OEBPS/Images/38368-1_33_2.jpg?sign=1739445403-qfCn5SqAnAy3lfEUpphlo1zy0nNYIMLh-0-0b943199f5485f0b1942da905d308760)
常量是指在程序运行过程中不会改变的数值,如我们每个人的身份证号,这串数字就是一个常量,是不能更改的。常量可以分为整型常量、浮点型常量(实型常量)、字符常量和字符串常量,实例代码如下:
![](https://epubservercos.yuewen.com/5F7BC7/26764105801618006/epubprivate/OEBPS/Images/38368-1_33_3.jpg?sign=1739445403-QJ2DxurN6IDFkCscNI63mBBTfF3qnQLT-0-7b5c1b05108ac85fd0e7e6a23bb31730)
上面实例通过cout向屏幕输出4行内容。cout是输出流,实现向屏幕输出不同类型的数据。2009是整型常量,2.14是浮点型常量(实型常量),'a'是字符常量,"Hello World"是字符串常量。
2.2.1 整型常量
整型常量是指直接使用的整型常数,如0、100、-200等都是整型常数。
整型常量可以是长整型、短整型、符号整型和无符号整型。这几种整型常量如同容积不同的水杯,虽然用法一样,但在不同场景中需要使用不同容积的水杯。
表2.1 整型常量数据类型
![](https://epubservercos.yuewen.com/5F7BC7/26764105801618006/epubprivate/OEBPS/Images/38368-1_33_4.jpg?sign=1739445403-xpvuDutSG5VhwN8EH1XbkxJRUXVgvWcj-0-eec2164f223c6b78203da372e02af916)
注意:根据不同的编译器,整型常量的取值范围是不一样的。还有可能在16位的计算机中整型常量就为16位,在32位的计算机中整型常量就为32位。
在编写整型常量时,可以在整型常量的后面添加L或U进行修饰,L表示该常量是长整型,U表示该常量是无符号整型,例如:
![](https://epubservercos.yuewen.com/5F7BC7/26764105801618006/epubprivate/OEBPS/Images/38368-1_33_5.jpg?sign=1739445403-lnZRLzTsvS9vsKRok9nyQUn48VlznOAg-0-286e61efb83172a3811c4c6fa4cc7a76)
注意:表示长整型和无符号整型的后缀L和U不区分大小写。
所有整型常量可以通过3种形式进行表示,分别为八进制、十进制和十六进制,下面分别进行介绍。
1.八进制
使用的数据表达形式是八进制,需要在整型常量前加上0进行修饰。八进制所包含的数字是0~7,例如:
![](https://epubservercos.yuewen.com/5F7BC7/26764105801618006/epubprivate/OEBPS/Images/38368-1_34_1.jpg?sign=1739445403-BFQ5LzHNVC16FZ6gebAKDyILxD21NUT8-0-3e35f5df0619fc75d06c3549f688975b)
以下是八进制的错误写法:
![](https://epubservercos.yuewen.com/5F7BC7/26764105801618006/epubprivate/OEBPS/Images/38368-1_34_2.jpg?sign=1739445403-SCO4CjL3h7Dbu7pEZyZjEQyzJVw15hqD-0-af59003ef5b6c574eb554f4068437b19)
2.十六进制
整型常量前面使用0x作为前缀(需要注意的是0x中的0是数字0,而不是字母O),表示该整型常量是用十六进制进行表示的。十六进制所包含的数字是0~9及字母A~F,例如:
![](https://epubservercos.yuewen.com/5F7BC7/26764105801618006/epubprivate/OEBPS/Images/38368-1_34_3.jpg?sign=1739445403-ax0H6xTVK5tLNvvCOBFPCJ79M103FXcB-0-1eb48b8b78dffba9ffbe572d541f4d9c)
注意:其中字母A~F不区分大小写。
3.十进制
十进制是不需要在整形常量前面添加前缀的。十进制所包含的数字是0~9,例如:
![](https://epubservercos.yuewen.com/5F7BC7/26764105801618006/epubprivate/OEBPS/Images/38368-1_34_4.jpg?sign=1739445403-iUvDhJrdCc2xDD8brwtFT00743gAP5MW-0-4540ab39d995b4a0ba7fd07383c6c1bc)
整型数据都是以二进制的方式存储在计算机的内存中,其数值是以补码的形式进行表示的。正数的补码与其原码的形式相同,负数的补码是将该数绝对值的二进制形式按位取反再加1。例如,一个十进制数11在计算机内存中的表现形式如图2.6所示。
![](https://epubservercos.yuewen.com/5F7BC7/26764105801618006/epubprivate/OEBPS/Images/38368-1_34_5.jpg?sign=1739445403-Aw4JDVLq4uqqYT12SKR7zdgEpsImC1vZ-0-2128d2ebf0ebb54bccf88006dd22077f)
图2.6 十进制数11在计算机内存中的表现形式
如果是-11,那么在内存中又是怎样的呢?因为是以补码进行表示的,所以负数要先将其绝对值求出,然后进行取反操作,得到取反后的结果如图2.7所示。
![](https://epubservercos.yuewen.com/5F7BC7/26764105801618006/epubprivate/OEBPS/Images/38368-1_34_6.jpg?sign=1739445403-juqoTVNWjSOHtsyeHnjHbyOA03T8ooog-0-2d96272c5628bd0c159aad32e86f3b55)
图2.7 进行取反操作
取反之后还要进行加1操作,这样就得到最终的结果。-11在计算机内存中存储的形式如图2.8所示。
![](https://epubservercos.yuewen.com/5F7BC7/26764105801618006/epubprivate/OEBPS/Images/38368-1_34_7.jpg?sign=1739445403-1wkVetn02y4qg8HivxUtnBsWOSIvhE5e-0-d65b4e2f849120195fff5f65cfc78d52)
图2.8-11在计算机内存中存储的形式
注意:对于有符号整数来说,其在内存中存储的最左侧一位表示符号位,如果该位为0,则说明该数为正数;如果该位为1,则说明该数为负数。
注意:在 Windows 操作系统中,选择“开始”→“附件”→“计算器”命令,弹出“计算器”对话框,可以使用“计算器”对话框进行八进制、十进制和十六进制之间的转换。这里需要注意的是,要选用程序员计算器,其方法是,选择“查看”→“程序员”命令,显示的“计算器”对话框样式如图2.9所示。
![](https://epubservercos.yuewen.com/5F7BC7/26764105801618006/epubprivate/OEBPS/Images/38368-1_35_1.jpg?sign=1739445403-JDpVdPIciEOpZWAvSlOWc2KCmHXEPguF-0-dca61eadfc7d2c4084358109ea15d36e)
图2.9 “计算器”对话框
2.2.2 实型常量
实型常量也称为浮点型常量,它是由整数部分和小数部分组成的,并且用十进制的小数点进行隔开,如图2.10所示的超市小票中的应付金额“1.80”就是实型常量。
![](https://epubservercos.yuewen.com/5F7BC7/26764105801618006/epubprivate/OEBPS/Images/38368-1_35_2.jpg?sign=1739445403-3NRVBgE7gq7gdlg4lQiWGcdOAZUPYqdE-0-c64c209714d1d0a178cf632db942f47f)
图2.10 实型常量
在C++中表示实型常量的方式有以下两种。
1.科学计数方式
科学计数方式是使用十进制的小数方法描述实型常量的,例如:
![](https://epubservercos.yuewen.com/5F7BC7/26764105801618006/epubprivate/OEBPS/Images/38368-1_35_3.jpg?sign=1739445403-Ap6khNnTE5IWICMmb51bQlUg0Ufg6htn-0-801c6bafd7e31360667470bf434b2c29)
2.指数方式
有时实型常量非常大或非常小,使用科学计数方式不利于用户观察,这时可以使用指数方式表示实型常量。其中,使用e或E进行指数显示,如514e2表示的是51400,而514e-2表示的是5.14。使用指数方式显示SciNum1和SciNum2,例如:
![](https://epubservercos.yuewen.com/5F7BC7/26764105801618006/epubprivate/OEBPS/Images/38368-1_35_4.jpg?sign=1739445403-eEa06klBn6vOebVcdcFQESYZNPJT6CLs-0-1d7edceaac32d144f36369666abfc152)
在编写实型常量时,可以在实型常量的后面添加 F 或L 进行修饰,F 表示该常量是单精度类型,L表示该常量是长双精度类型,例如:
![](https://epubservercos.yuewen.com/5F7BC7/26764105801618006/epubprivate/OEBPS/Images/38368-1_36_1.jpg?sign=1739445403-5rOUVQmeJJuUXVACYauEANVOlYxfduJJ-0-b64b24e9e58309f586670fff7fc5deb3)
注意:如果不在实型常量后面添加后缀,在默认状态下,实型常量为双精度类型;在实型常量后面添加的后缀不区分大小写。
2.2.3 字符常量
字符常量是用单引号括起来的一个字符,如'a'和'?'都是合法的字符常量。在对代码进行编译时,编译器会根据ASCII码表将字符常量转换成整型常量。字符'a'的ASCII码值是97,字符'A'的ASCII码值是65,字符'?'的ASCII码值是63。在ASCII码表中还有很多无法通过键盘输入的字符,可以使用'\ddd'或'\xhh'来引用这些字符,并且 ASCII 码表中的所有字符都可以使用'\ddd'或'\xhh'来引用。'\ddd'是1~3 位八进制数所代表的字符,'\xhh'是1~2 位十六进制数所代表的字符,如'\101'表示ASCII码“A”,'\XOA'表示换行等。
转义字符应用,代码如下:
![](https://epubservercos.yuewen.com/5F7BC7/26764105801618006/epubprivate/OEBPS/Images/38368-1_36_2.jpg?sign=1739445403-RctnJvlZFvXwDRTjZX4T3SEusG5QFSb3-0-389d564276bf3f339d2edd1a3f4c461c)
程序运行结果如图2.11所示。
![](https://epubservercos.yuewen.com/5F7BC7/26764105801618006/epubprivate/OEBPS/Images/38368-1_36_3.jpg?sign=1739445403-A37wDSVY8pVZx8KjOdAZW4GsMccDI6JW-0-acaa2a50ba1d12973ed58081cadfae77)
图2.11 转义字符应用
转义字符是特殊的字符常量,使用时以字符“\”表示开始转义,转义字符说明如表2.2所示。
表2.2 转义字符说明
![](https://epubservercos.yuewen.com/5F7BC7/26764105801618006/epubprivate/OEBPS/Images/38368-1_36_4.jpg?sign=1739445403-eTDsCfgndYBjHuMS9clZRdVRj7kE74rC-0-264beb0edba4ec30e3fbe2110b0ccce2)
续表
![](https://epubservercos.yuewen.com/5F7BC7/26764105801618006/epubprivate/OEBPS/Images/38368-1_37_1.jpg?sign=1739445403-9dnadr8Fde95PQFSkaiiQ9aeVDl0WxQL-0-b4b135cbf3e3b549f4178546c997934c)
2.2.4 字符串常量
字符串常量是用一组双引号括起来的若干个字符序列,如"ABC"、"abc"、"1314"和"您好"等都是正确的字符串常量。
如果在字符串常量中一个字符都没有,则将其称为空字符串,此时字符串的长度为0,如""。
在C++中存储字符串常量时,系统会在字符串的末尾自动添加一个“\0”作为字符串的结束标志,如字符串“welcome”在内存中的存储形式如图2.12所示。
![](https://epubservercos.yuewen.com/5F7BC7/26764105801618006/epubprivate/OEBPS/Images/38368-1_37_2.jpg?sign=1739445403-1lkaHHpfB525RvMPflJhSzGnjk7Hd03S-0-5dca046dde9d0e8299bf274bee846fee)
图2.12 字符串“welcome”在内存中的存储形式
注意:在C++程序中编写字符串常量时,不必在一个字符串的结尾处添加“\0”结束标志,系统会自动添加“\0”结束标志。
前面介绍了有关字符常量和字符串常量的内容,它们之间的区别主要表现在以下几方面。
(1)定界符的使用不同。字符常量使用的是单引号,而字符串常量使用的是双引号。
(2)长度不同。字符常量只能有一个字符,也就是说字符常量的长度是1。字符串常量的长度可以是0。但是需要注意的是,即使字符串常量中的字符只有1个,长度却不是1。如字符串常量“H”,其长度为2,如图2.13所示为字符串常量“H”在内存中的存储方式。
![](https://epubservercos.yuewen.com/5F7BC7/26764105801618006/epubprivate/OEBPS/Images/38368-1_37_3.jpg?sign=1739445403-0OnfIgzFeUR7ceywtCNyH8gh9cs5pE4m-0-74ecfa571ac95e83c62b524b30907a62)
图2.13 字符串常量“H”在内存中的存储方式
(3)存储的方式不同。在字符常量中存储的是字符的ASCII码值,如“A”的ASCII值为65,“a”的ASCII值为97。在字符串常量中,不仅要存储有效的字符,还要存储结尾的结束标志“\0”。
注意:系统会自动在字符串的末尾添加一个字符串的结束标志“\0”,这也就是字符串常量“H”的长度是2的原因。
上文简单介绍了有关ASCII码表的内容,那么ASCII码表是什么呢?在C++中,所使用的字符被一一映射到一个表中,这个表被称为ASCII码表,如表2.3所示。
表2.3 十进制的ASCII码表
![](https://epubservercos.yuewen.com/5F7BC7/26764105801618006/epubprivate/OEBPS/Images/38368-1_38_1.jpg?sign=1739445403-vCAoPbwzFnLs8B41i6KC7j5Xa3YLDIvJ-0-95a5d84cebf88224a28cda4509992324)
续表
![](https://epubservercos.yuewen.com/5F7BC7/26764105801618006/epubprivate/OEBPS/Images/38368-1_39_1.jpg?sign=1739445403-hdzJHsJrmkRSEbm4Zj0ar4Xpnv19Zmpv-0-07d368aea19f889d28255fea37d4783a)
2.2.5 其他常量
常量除包括整型常量、浮点型常量、字符常量和字符串常量外,还包括布尔常量、枚举常量、宏定义常量等。
● 布尔(bool)常量:布尔常量只有两个,一个是true,表示真;另一个是false,表示假。
● 枚举常量:在枚举型数据中定义的成员也都是常量,这将在后文介绍。
● 宏定义常量:通过#define宏定义的一些值也是常量,例如:
![](https://epubservercos.yuewen.com/5F7BC7/26764105801618006/epubprivate/OEBPS/Images/38368-1_39_2.jpg?sign=1739445403-EmTlOJnw3oUk5Waz1G20MmBUaeFl66zH-0-6b7c9826d5c0aff715e1ddeba6d8424b)
其中,PI就是常量。