3.4 常量

常量是指在程序运行过程中值不会改变的数值。例如,我们每个人的身份证号码,这串数字就是一个常量,是不能被更改的。

常量可以分为以下3类:

●数值型常量,包括整型常量和实型常量。

●字符型常量。

●符号常量。

下面对这3种类型的常量进行详细介绍。

3.4.1 整型常量

img

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

整型常量的数据类型如表3.2所示。

表3.2 整型常量的数据类型

img

学习笔记

使用不同的编译器,整型常量的数据类型的取值范围有可能是不一样的,有可能在32位的计算机中整型常量为32位,在64位的计算机中整型常量为64位。

在书写整型常量时,可以在常量的后面加上符号L或U进行修饰。L表示该常量是长整型数据,U表示该常量为无符号整型数据。例如:

img

学习笔记

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

整型常量的表示形式有3种,分别为八进制形式、十进制形式和十六进制形式。

1.八进制整型常量

使用八进制形式表示整型常量,需要在整型常数前面加个0作为前缀。八进制整型常量中包含数字0~7。例如:

img

以下是八进制整型常量的错误写法:

img

2.十六进制整型常量

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

img

学习笔记

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

3.十进制整型常量

十进制整型常量无须在常量前面添加前缀。十进制整型常量中包含数字0~9。例如:

img

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

img

图3.1 十进制数11在内存空间中的存储形式

十进制数-11在内存空间中的存储形式是怎样的呢?负数是以补码的形式表示的,首先求出其绝对值,然后对该绝对值进行取反操作,如图3.2所示。

img

图3.2 进行取反操作

在进行取反操作后,进行加1操作,即可得到十进制数-11在内存空间中的存储形式,如图3.3所示。

img

图3.3 十进制数-11在内存空间中的存储形式

学习笔记

有符号整数在内存空间中最左面的一位是符号位,如果该位为0,则说明该数为正数;如果该位为1,则说明该数为负数。

3.4.2 实型常量

img

实型又称为浮点型。实型常量由整数部分和小数部分组成,并且用小数点分隔。例如,超市小票中的应收金额就是实型常量,如图3.4所示。

img

图3.4 实型常量

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

1.小数表示方式

小数表示方式就是使用十进制的小数表示实型常量。例如:

img

2.指数表示方式(科学记数表示方式)

当实型常量非常大或非常小时,使用小数表示方式表示实型常量是不利于观察的,这时可以使用指数表示方式表示实型常量。其中,使用字母e或E进行指数显示。例如,514e2表示51400,514e-2表示5.14。使用指数表示方式表示上面的SciNum1和SciNum2代表的实型常量,如下所示:

img

在书写实型常量时,可以在实型常量的后面加上符号F或L作为后缀。F表示该常量是float(单精度)类型的数据,L表示该常量为long double(长双精度)类型的数据。例如:

img

学习笔记

如果不在实型常量的后面加后缀,在默认情况下,实型常量为double(双精度)类型的数据。在实型常量后面添加的后缀不区分大小写。

3.4.3 字符型常量

img

字符型常量与前面介绍的常量有所不同,要对字符型常量使用指定的定界符进行限制。字符型常量可以分成两种,一种是字符常量,另一种是字符串常量。下面分别对这两种字符型常量进行介绍。

1.字符常量

字符常量是指用一对英文半角格式的单引号括起来的一个字符,如'A'、'#'、'b'和'1'都是正确的字符常量。

学习笔记

●字符常量中只能包括一个字符,不是字符串。例如,'A'是正确的,但是用'AB'表示字符常量就是错误的。

●字符常量是区分大小写的。例如,'A'字符和'a'字符是不一样的,这两个字符代表不同的字符常量。

●这对单引号代表定界符,不属于字符常量中的一部分。

学习笔记

在书写字符常量时不可以使用3个单引号,因为编译器会不知道从哪里开始,到哪里结束。例如:

img

会出现如下所示的错误。

img

2.字符串常量

字符串常量是指用一对英文半角格式的双引号括起来的若干个字符的序列,如"ABC"、"abc"、"1314"和"您好"都是正确的字符串常量。

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

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

img

图3.5 字符串"welcome"在内存空间中的存储形式

学习笔记

在程序中书写字符串常量时,不必在字符串的末尾添加结束符“\0”,系统会自动添加结束符“\0”。

3.字符常量和字符串常量的区别

前面介绍了字符常量和字符串常量,那么它们有什么区别呢?字符常量和字符串常量的区别具体体现在以下几方面:

●定界符不同。字符常量使用英文半角格式的单引号作为定界符,而字符串常量使用英文半角格式的双引号作为定界符。

●长度不同。字符常量只能有一个字符,因此字符常量的长度是1。字符串常量的长度可以是0,但是需要注意的是,即使字符串常量中的字符数量只有1个,长度也不是1。例如,字符串常量"H"的长度为2,因为系统会在"H"末尾自动加一个结束符“\0”,字符串常量"H"在内存空间中的存储形式如图3.6所示。

img

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

●存储形式不同。在字符常量中存储的是字符的ASCII码值。例如,'A'的ASCII码值为65,'a'的ASCII码值97。在字符串常量中,不仅要存储有效的字符,还要存储末尾的结束符“\0”。

4.ASCII码

前面提到过有关ASCII码的内容,那么ASCII码是什么呢?C语言中使用的字符被一一映射到一个表中,这个表称为ASCII码表。十进制的ASCII码表如表3.3所示。

表3.3 十进制的ASCII码表

img

续表

img

3.4.4 转义字符

img

前面介绍了“\n”符号,这种符号称为转义字符。

转义字符是一种特殊的字符,它以反斜杠“\”开头,后面跟着一个或多个字符。常用的转义字符如表3.4所示。

表3.4 常用的转义字符

img

3.4.5 符号常量

img

使用一个符号代替固定的常量,就是符号常量,如下面代码中的PAI就是一个符号常量(实例内容参考配套资源中的源码)。

img

运行上述程序,运行结果如图3.7所示。

img

图3.7 圆的面积运行结果