- C++编程入门指南(全2册)
- 明日科技编著
- 2601字
- 2024-01-19 16:07:43
2.2 常量与符号
![](https://epubservercos.yuewen.com/5F7BC7/26764105801618006/epubprivate/OEBPS/Images/38368-1_33_2.jpg?sign=1738932071-OhugcN3Tsz4i1JzwGqLnYxUsBgNhspyo-0-04ef4f31244fa81fa24a7703a025f1ae)
常量是指在程序运行过程中不会改变的数值,如我们每个人的身份证号,这串数字就是一个常量,是不能更改的。常量可以分为整型常量、浮点型常量(实型常量)、字符常量和字符串常量,实例代码如下:
![](https://epubservercos.yuewen.com/5F7BC7/26764105801618006/epubprivate/OEBPS/Images/38368-1_33_3.jpg?sign=1738932071-1WZTVbuHrK2GlrZcsCgjw9P8Ml94moZT-0-f3dccf140023c2dd5f63752ee29d8d0c)
上面实例通过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=1738932071-J6CIQoqjpDq9meTRVAFg8p1FooFruAqf-0-14e0f335b8a8da02caf6349a561fb5bf)
注意:根据不同的编译器,整型常量的取值范围是不一样的。还有可能在16位的计算机中整型常量就为16位,在32位的计算机中整型常量就为32位。
在编写整型常量时,可以在整型常量的后面添加L或U进行修饰,L表示该常量是长整型,U表示该常量是无符号整型,例如:
![](https://epubservercos.yuewen.com/5F7BC7/26764105801618006/epubprivate/OEBPS/Images/38368-1_33_5.jpg?sign=1738932071-SSMzO17qipsG33j76E73jafRpZrqnrZA-0-723fd38f1871d23c25834fd809b75dfb)
注意:表示长整型和无符号整型的后缀L和U不区分大小写。
所有整型常量可以通过3种形式进行表示,分别为八进制、十进制和十六进制,下面分别进行介绍。
1.八进制
使用的数据表达形式是八进制,需要在整型常量前加上0进行修饰。八进制所包含的数字是0~7,例如:
![](https://epubservercos.yuewen.com/5F7BC7/26764105801618006/epubprivate/OEBPS/Images/38368-1_34_1.jpg?sign=1738932071-5HXFw26mfUMoIabViQBkRVZsiLGFd5F7-0-ee3145dc347b60f9d76d878f41d2a517)
以下是八进制的错误写法:
![](https://epubservercos.yuewen.com/5F7BC7/26764105801618006/epubprivate/OEBPS/Images/38368-1_34_2.jpg?sign=1738932071-wceixPWQnmRhbvHYtKZOOUmjhxD5cgFe-0-8608897b83ba726ed6172fa7dd544f70)
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=1738932071-c9zeUYOaN3IRr0M5J5IqP5zN8f5ZjIA5-0-644b101870a9dada101f2a6e55238822)
注意:其中字母A~F不区分大小写。
3.十进制
十进制是不需要在整形常量前面添加前缀的。十进制所包含的数字是0~9,例如:
![](https://epubservercos.yuewen.com/5F7BC7/26764105801618006/epubprivate/OEBPS/Images/38368-1_34_4.jpg?sign=1738932071-S3dkF2zLxKOJFcxFl3ZR09dsPwr58agK-0-83a71768a99af4ab199baf9405e041ca)
整型数据都是以二进制的方式存储在计算机的内存中,其数值是以补码的形式进行表示的。正数的补码与其原码的形式相同,负数的补码是将该数绝对值的二进制形式按位取反再加1。例如,一个十进制数11在计算机内存中的表现形式如图2.6所示。
![](https://epubservercos.yuewen.com/5F7BC7/26764105801618006/epubprivate/OEBPS/Images/38368-1_34_5.jpg?sign=1738932071-k01fsBjN7KD4SSWfT79OnrBGWsabAmYq-0-1eedaacdc018b4945c51b975c6f703c0)
图2.6 十进制数11在计算机内存中的表现形式
如果是-11,那么在内存中又是怎样的呢?因为是以补码进行表示的,所以负数要先将其绝对值求出,然后进行取反操作,得到取反后的结果如图2.7所示。
![](https://epubservercos.yuewen.com/5F7BC7/26764105801618006/epubprivate/OEBPS/Images/38368-1_34_6.jpg?sign=1738932071-z1tgA1cm9vG2W4eLuDa6KepBNZ4huaAk-0-f081a79303c3f5af811a1dde070ab329)
图2.7 进行取反操作
取反之后还要进行加1操作,这样就得到最终的结果。-11在计算机内存中存储的形式如图2.8所示。
![](https://epubservercos.yuewen.com/5F7BC7/26764105801618006/epubprivate/OEBPS/Images/38368-1_34_7.jpg?sign=1738932071-iNtpH54KeCDKXhhgqTSJSVHgQGLUyAB7-0-b3ea66d4cc2dbc0c4b3914b6436e3c4f)
图2.8-11在计算机内存中存储的形式
注意:对于有符号整数来说,其在内存中存储的最左侧一位表示符号位,如果该位为0,则说明该数为正数;如果该位为1,则说明该数为负数。
注意:在 Windows 操作系统中,选择“开始”→“附件”→“计算器”命令,弹出“计算器”对话框,可以使用“计算器”对话框进行八进制、十进制和十六进制之间的转换。这里需要注意的是,要选用程序员计算器,其方法是,选择“查看”→“程序员”命令,显示的“计算器”对话框样式如图2.9所示。
![](https://epubservercos.yuewen.com/5F7BC7/26764105801618006/epubprivate/OEBPS/Images/38368-1_35_1.jpg?sign=1738932071-kSoVOTh6ustX60jiHVDFuyK9SQbGTDV4-0-354273212c47df3702d16bb74b8f692b)
图2.9 “计算器”对话框
2.2.2 实型常量
实型常量也称为浮点型常量,它是由整数部分和小数部分组成的,并且用十进制的小数点进行隔开,如图2.10所示的超市小票中的应付金额“1.80”就是实型常量。
![](https://epubservercos.yuewen.com/5F7BC7/26764105801618006/epubprivate/OEBPS/Images/38368-1_35_2.jpg?sign=1738932071-7eo0JgluffrTyZ2t5yGZThhH2nLzKHVL-0-62090fe42f17bf09dc243fe386009995)
图2.10 实型常量
在C++中表示实型常量的方式有以下两种。
1.科学计数方式
科学计数方式是使用十进制的小数方法描述实型常量的,例如:
![](https://epubservercos.yuewen.com/5F7BC7/26764105801618006/epubprivate/OEBPS/Images/38368-1_35_3.jpg?sign=1738932071-Ummx2j4YMWDDfYDit2JNoZ6fXgoSm9mv-0-96c57977c0e1c134b8cef6741fc68919)
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=1738932071-s1vwYYJWWiXulP0ipOkgL33TabsWLMzh-0-99e41b448bd8c4eef6161af07285e225)
在编写实型常量时,可以在实型常量的后面添加 F 或L 进行修饰,F 表示该常量是单精度类型,L表示该常量是长双精度类型,例如:
![](https://epubservercos.yuewen.com/5F7BC7/26764105801618006/epubprivate/OEBPS/Images/38368-1_36_1.jpg?sign=1738932071-kPXUAwjqJ9URF6nhxBUPQrLXc3dWEMkP-0-a17d325176316e69cfbc7dc644573548)
注意:如果不在实型常量后面添加后缀,在默认状态下,实型常量为双精度类型;在实型常量后面添加的后缀不区分大小写。
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=1738932071-Q8fn3Fyn2vI8OgXMriqwlqzT784sBH6F-0-e487b8ff0aa3afb61f25ee545fd7c013)
程序运行结果如图2.11所示。
![](https://epubservercos.yuewen.com/5F7BC7/26764105801618006/epubprivate/OEBPS/Images/38368-1_36_3.jpg?sign=1738932071-dhDduGLQMhpCIhx1sY3JomT0oObmjP2d-0-9d94560d959554317681e47141420f15)
图2.11 转义字符应用
转义字符是特殊的字符常量,使用时以字符“\”表示开始转义,转义字符说明如表2.2所示。
表2.2 转义字符说明
![](https://epubservercos.yuewen.com/5F7BC7/26764105801618006/epubprivate/OEBPS/Images/38368-1_36_4.jpg?sign=1738932071-FhjpIg2h5LlPadiY0aaJ6TBebTZU96Nk-0-3fb0c73233903adf178a62be32af3857)
续表
![](https://epubservercos.yuewen.com/5F7BC7/26764105801618006/epubprivate/OEBPS/Images/38368-1_37_1.jpg?sign=1738932071-FfklINikORs8nn4mNHx0LrgLjwmRPJ8T-0-09f740a92c0aa0ca0adf60c0c04a9528)
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=1738932071-T4vXubP72D7luCQTqhUXxWV0gXcPMHUw-0-f9468849d092b43f0a457f4864aded58)
图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=1738932071-C9CYBOYTLbmthsVRNmAP2TeKScU7uHZN-0-ef1779ba6eef49f4034eaeb1d43b7fee)
图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=1738932071-XXGwXeUC7sh1fvZvgkHgFsXQ8SXFioIr-0-c471dc5ee7c601d2e0f3ff839743b7c0)
续表
![](https://epubservercos.yuewen.com/5F7BC7/26764105801618006/epubprivate/OEBPS/Images/38368-1_39_1.jpg?sign=1738932071-vngsXFS1da9b1u1D6KxOKOFbWmOMjquN-0-d07532b613820e3c35476e386cc0e669)
2.2.5 其他常量
常量除包括整型常量、浮点型常量、字符常量和字符串常量外,还包括布尔常量、枚举常量、宏定义常量等。
● 布尔(bool)常量:布尔常量只有两个,一个是true,表示真;另一个是false,表示假。
● 枚举常量:在枚举型数据中定义的成员也都是常量,这将在后文介绍。
● 宏定义常量:通过#define宏定义的一些值也是常量,例如:
![](https://epubservercos.yuewen.com/5F7BC7/26764105801618006/epubprivate/OEBPS/Images/38368-1_39_2.jpg?sign=1738932071-xhAfY5Q1Wl9AhkmL9xkUcmQUu30haSky-0-c00c199ffa37b251cd225531225c7166)
其中,PI就是常量。