C++中的常量(非常详细)
程序运行过程中,其值不能改变的量称为常量。常量包括整型常量、浮点型常量、字符常量、字符串常量等。
例如,下面通过 cout 向屏幕输出 4 行内容。cout 是输出流,可向屏幕输出不同类型的数据。2009 是整数(即整型常量),2.14 是小数(即浮点型常量),'a' 是字符常量,"Hello World" 是字符串常量。
编写代码时,可将整型常量表示为十进制、八进制和十六进制 3 种表示形式。
例如,0396 不是合法的八进制整数,因为 9 不是八进制应有的取值;0X3N 不是合法的十六进制整数,因为 N 不是十六进制应有的取值。
整型常量不可以无限大,它的最大值是有限定的。根据 CPU 寄存器位数以及编译器的不同,最大的整型常量值也会不同。
浮点型的表示方法有两种,即小数表示法和指数表示法。
另外,整数部分和小数部分可以省略一处,例如,.2表示小数0.2,2.表示小数2.0。
例如,1.2e20 和 -2.4e-2 是合法的实型常量,其中 1.2e20 表示 1.2×10^20,-2.4e-2 表示 -2.4×10^-2。而 E5、3E2.5 不是合法的实型常量,因为 E5 中 E 之前无数字,3E2.5 中 E 后面有小数。
编译代码时,编译器会根据 ASCII 码表将字符常量转换成整型常量。其中,'a' 对应的 ASCII 码值是 97,'A' 对应的 ASCII 码值是 65,'?' 对应的 ASCII 码值是 63。' '表示空字符(NULL),有的编译器把它编译成 0,有的则编译成其他值。
除了这些固定字符,ASCII 码表中还有很多无法通过键盘输入的字符。例如,输出结果中却不显示“\n”符号,只是进行了换行操作,这种符号称为转义字符。
下面来看一个转义字符的应用示例,代码如下:
例如,"hello"、"welcome to China" 都是合法的字符串常量。其中," " 表示一个空字符串,此时字符串的长度为 0。
字符串常量实际上是一个字符数组,可以将字符串分解成若干个字符,字符的数量是字符串的长度。字符串常量一般用来给字符数组变量赋值或是直接作为实参传递,为告知编译器字符串已经结束,一般在给字符数组赋初值时在字符串的末尾加上字符 '\0',表示字符结束,如果不加字符结束标志,可能会出现意想不到的错误。
注意,字符 'A' 与字符串 "A" 含义不同。内存中,字符 'A' 则只包含一个字符;字符串 "A" 由 'A' 和 '\0' 两个字符组成,字符串的长度是 2。
布尔类型(bool)是表示是否、对错等真假判断的数据类型,常用在逻辑判断中。布尔类型只有 true 和 false 两个取值。true 表示真,其值为 1;false 表示假,其值为 0。
枚举型数据中定义的数据也都是常量。
通过 #define 宏定义的值也是常量。例如:
例如,下面通过 cout 向屏幕输出 4 行内容。cout 是输出流,可向屏幕输出不同类型的数据。2009 是整数(即整型常量),2.14 是小数(即浮点型常量),'a' 是字符常量,"Hello World" 是字符串常量。
#include <iostream> using namespace std; int main() { cout << 2009 << endl; // 输出整数 2009 cout << 2.14 << endl; // 输出小数 2.14 cout << 'a' << endl; // 输出字符 a cout << "Hello World"<< endl; // 输出字符串 Hello World }
C++整型常量
整型常量就是整型常数(没有小数部分),如 123、−456、0 等。编写代码时,可将整型常量表示为十进制、八进制和十六进制 3 种表示形式。
- 十进制:我们日常见到的整数都是十进制形式的,如 365、75 等。十进制数使用0~9来表示所有数,递进关系为逢十进一。注意,除了 0 本身,其他十进制数不能以 0 开头。
- 八进制:使用 0~7 来表示所有的数,递进关系为逢八进一。八进制常量前要加上 0 作为前缀,如 0123、0432 等。
- 十六进制:使用 0~9 和字母 A~F(或 a~f)来表示所有的数,递进关系为逢十六进一。十六进制常量前要加上 0x 或 0X 作为前缀,如 0x123、0x3ba4。
例如,0396 不是合法的八进制整数,因为 9 不是八进制应有的取值;0X3N 不是合法的十六进制整数,因为 N 不是十六进制应有的取值。
整型常量不可以无限大,它的最大值是有限定的。根据 CPU 寄存器位数以及编译器的不同,最大的整型常量值也会不同。
注意,“合法”主要指能通过编译器编译,“非法”或“不合法”指不能通过编译器编译。
C++浮点型常量
浮点型(又称为实型)常量就是我们常见的小数,只能采用十进制形式表示。浮点型的表示方法有两种,即小数表示法和指数表示法。
1) 小数表示法
小数表示法由整数部分和小数部分组成,中间用小数点分隔。例如,0.0、2.25、0.00596、5.0、536.、-5.3、-0.002 均为合法的实型常量。另外,整数部分和小数部分可以省略一处,例如,.2表示小数0.2,2.表示小数2.0。
2) 指数表示法
指数表示法又称为科学记数法,指数部分以“e”或“E”开始,后跟整数。例如,1.2e20 和 -2.4e-2 是合法的实型常量,其中 1.2e20 表示 1.2×10^20,-2.4e-2 表示 -2.4×10^-2。而 E5、3E2.5 不是合法的实型常量,因为 E5 中 E 之前无数字,3E2.5 中 E 后面有小数。
C++字符常量
使用一对单直撇引号(' ')括起来的字符就是字符常量,如 'a'、'A'、'?'、'#'、'b' 等。编译代码时,编译器会根据 ASCII 码表将字符常量转换成整型常量。其中,'a' 对应的 ASCII 码值是 97,'A' 对应的 ASCII 码值是 65,'?' 对应的 ASCII 码值是 63。' '表示空字符(NULL),有的编译器把它编译成 0,有的则编译成其他值。
除了这些固定字符,ASCII 码表中还有很多无法通过键盘输入的字符。例如,输出结果中却不显示“\n”符号,只是进行了换行操作,这种符号称为转义字符。
转义字符 | 意义 | ASCII 代码 | 转义字符 | 意义 | ASCII 代码 |
---|---|---|---|---|---|
\0 | 空字符 | 0 | \\ | 反斜杠 | 93 |
\n | 换行 | 10 | ' | 单引号字符 | 39 |
\t | 水平制表 | 9 | " | 双引号字符 | 34 |
b | 退格 | 8 | a | 响铃 | 7 |
r | 回车 | 13 | f | 换页 | 12 |
ddd | 1~3 位八进制数代表的字符 | xhh | 1~2 位十六进制数代表的字符 |
下面来看一个转义字符的应用示例,代码如下:
#include <iostream> int main() { std::cout << "A" << std::endl; std::cout << "\101" << std::endl; // 使用\ddd 表示的转义字符 std::cout << "\x41" << std::endl; // 使用\xhh 表示的转义字符 std::cout << "\052" << std::endl; }代码运行结果为:
A
A
A
*
C++字符串常量
字符串常量是用一对双直撇引号(" ")括起来的字符序列。例如,"hello"、"welcome to China" 都是合法的字符串常量。其中," " 表示一个空字符串,此时字符串的长度为 0。
字符串常量实际上是一个字符数组,可以将字符串分解成若干个字符,字符的数量是字符串的长度。字符串常量一般用来给字符数组变量赋值或是直接作为实参传递,为告知编译器字符串已经结束,一般在给字符数组赋初值时在字符串的末尾加上字符 '\0',表示字符结束,如果不加字符结束标志,可能会出现意想不到的错误。
注意,字符 'A' 与字符串 "A" 含义不同。内存中,字符 'A' 则只包含一个字符;字符串 "A" 由 'A' 和 '\0' 两个字符组成,字符串的长度是 2。
C++其他常量
除了整型、浮点型、字符型、字符串型常量外,还存在布尔常量、枚举常量和宏定义常量等。布尔类型(bool)是表示是否、对错等真假判断的数据类型,常用在逻辑判断中。布尔类型只有 true 和 false 两个取值。true 表示真,其值为 1;false 表示假,其值为 0。
枚举型数据中定义的数据也都是常量。
通过 #define 宏定义的值也是常量。例如:
#define PI 3.1415其中 PI 就是常量,代表的是 3.1415。编译时遇到 PI,就会被自动替换为 3.1415。