零基础学C++(升级版)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.2 常量及符号

视频讲解

视频讲解:资源包\Video\02\2.2常量及符号.mp4

常量就是其值在程序运行过程中不可以改变的量。例如,我们每个人的身份证号码就是一个常量,是不能被更改的。常量可分为整型常量、实型常量、字符常量和字符串常量。

上面的代码通过cout向屏幕输出4行内容。cout是输出流,实现向屏幕输出不同类型的数据。代码中的2009是整型常量,2.14是实型常量,'a'是字符常量,"HelloWorld"是字符串常量。

2.2.1 整型常量

整型常量就是指直接使用的整型常数,例如0、100、-200等。

整型常量的数据类型可以分为长整型、短整型(有符号和无符号)、有符号整型和无符号整型。如表2.1所示,这几种数据类型如同容积大小不同的烧杯,虽然用法一样,但在不同的场景中就使用不同容量的烧杯。

表2.1 整型常量的数据类型

说明

根据不同的编译器,整型的取值范围是不一样的。还有可能的是,在16位的计算机中整型就为16位,在32位的计算机中整型就为32位。

在编写整型常量时,可以在常量的后面加上“L”或者“U”符号进行修饰。其中,“L”表示该常量是长整型的,“U”表示该常量是无符号整型的。例如:

说明

表示长整型和无符号整型的后缀字母“L”和“U”可以使用大写的,也可以使用小写的。

所有整型常量的类型也可以通过3种形式进行表达,分别为八进制形式、十进制形式和十六进制形式。下面分别进行介绍。

1.八进制整数

使用八进制形式表达数据,需要在常量前面加上一个0进行修饰。八进制整数所包含的数字是0~7。例如:

以下是八进制形式的错误写法:

2.十六进制整数

在常量前面使用0x作为前缀(注意:0x中的0是数字0,而不是字母O),表示该常量是十六进制形式的。十六进制整数中包含数字0~9以及字母A~F。例如:

说明

其中字母A~F可以使用大写形式,也可以使用a~f小写形式。

3.十进制整数

十进制形式是不需要在常量前面添加前缀的。十进制整数中所包含的数字为0~9。例如:

整型数据都是以二进制形式存放在计算机内存中的,其数值以补码的形式进行表示。正数的补码与其原码的形式相同,负数的补码是将该数绝对值的二进制形式按位取反再加1。例如,十进制数11在内存中的表现形式如图2.5所示。

图2.5 十进制数11在内存中的表现形式

如果是-11,那么在内存中又是怎样表现的呢?因为数值是以补码形式进行表示的,所以对于负数,要先求出其绝对值,然后进行取反操作,如图2.6所示,得到取反后的结果。

图2.6 取反操作

取反之后还要进行加1操作,这样就得到最终的结果。例如,-11在计算机内存中的存储情况如图2.7所示。

图2.7-11在计算机内存中的存储情况

说明

对于有符号整数,其在内存中存储的最左边一位表示符号位,如果该位为0,则说明该数为正数;如果该位为1,则说明该数为负数。

2.2.2 实型常量

实型也称为浮点型,实型常量是由整数部分和小数部分组成的,它们之前用十进制形式的小数点隔开。例如,超市小票中的应收金额就是实型常量数据,如图2.8所示。

图2.8 实型常量数据

在C++语言中表示实型常量的方式有以下两种。

1.科学计数方式

科学计数方式就是使用十进制形式的小数方法描述实型常量。例如:

2.指数方式

有时实型常量非常大或者非常小,使用科学计数方式不利于观察,这时就可以使用指数方式表示实型常量。其中,使用字母e或者E进行指数显示,如514e2表示的是51400,而514e-2表示的是5.14。比如SciNum1和SciNum2代表实型常量,使用指数方式显示这两个实型常量如下:

在编写实型常量时,可以在常量后面加上“F”或者“L”符号进行修饰。其中,“F”表示该常量是单精度类型(float)的,L表示该常量是长双精度类型(long double)的。例如:

注意

如果不在常量后面加上后缀,则默认实型常量是双精度类型(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”表示换行等。

示例:转义字符应用。

示例运行结果如图2.9所示。

图2.9 示例运行结果

转义字符是特殊的字符常量,使用时以字符“\”(代表开始转义)和后面不同的字符表示转义后的字符。转义字符如表2.2所示。

表2.2 转义字符

2.2.4 字符串常量

字符串常量是指用双引号括起来的若干字符序列。例如,"ABC"、"abc"、"1314"、"您好"等都是正确的字符串常量。

如果字符串中一个字符都没有,则将其称为空字符串,此时字符串的长度为0。例如""。

在C++中存储字符串常量时,系统会在字符串的末尾自动加上“\0”作为字符串的结束标志。例如,字符串"welcome"在内存中的存储形式如图2.10所示。

图2.10 字符串"welcome"在内存中的存储形式

注意

在程序中编写字符串常量时,不必在一个字符串的结尾处加上结束标志“\0”,系统会自动添加结束标志。

上面介绍了有关字符常量和字符串常量的内容,那么它们之间有什么区别呢?它们之间的区别具体体现在以下几个方面:

(1)定界符不同。字符常量使用的是单引号,而字符串常量使用的是双引号。

(2)长度不同。上面提到过,字符常量只能有一个字符,也就是说,字符常量的长度就是1。而字符串常量的长度可以是0。但需要注意的是,即使字符串常量中的字符只有1个,其长度也不是1。例如字符串常量"H",其长度为2。通过图2.11可以了解到字符串常量"H"的长度为2的原因。

图2.11 字符串常量"H"在内存中的存储形式

(3)存储方式不同,在字符常量中存储的是字符的ASCII码值,如'A'为65,'a'为97;而在字符串常量中,不仅要存储有效的字符,还要存储结尾处的结束标志“\0”。

说明

系统会自动在字符串的尾部添加结束标志“\0”,这也是字符串常量"H"的长度为2的原因。

2.2.5 其他常量

前面讲到的都是普通的常量,其实常量还包括布尔(bool)常量、枚举常量、宏定义常量等。

布尔常量:布尔常量只有两个,其中一个是true,表示真;另一个是false,表示假。

枚举常量:在枚举类型数据中定义的成员也都是常量,这将在后文中介绍。

宏定义常量:通过#define宏定义的一些值也是常量。例如:

其中,PI就是常量。