常量
常量可以是任何的基本数据类型,可分为整型数字、浮点数字、字符、字符串和布尔值。
常量就像是常规的变量,只不过常量的值在定义后不能进行修改。
整型常量
整数常量可以是十进制、八进制或十六进制的常量。
前缀指定基数:0x 或 0X 表示十六进制,0 表示八进制,不带前缀则默认表示十进制。
212 // 合法的
215u // 合法的
0xFeeL // 合法的
078 // 非法的:8 不是八进制的数字
032UU // 非法的:不能重复后缀
85 // 十进制
0213 // 八进制
0x4b // 十六进制
30 // 整数
30u // 无符号整数
30l // 长整数
30ul // 无符号长整数
用十六进制进行赋值有时候是比较好用的,尤其进行位操作时。
0x f f f f f f f f --> -1;
0x00000000 --> 0;
如果想以八进制或者十六进制数输出,可以使用相应的控制符:
八进制(Octal):oct;
十六进制:hex;
十进制:dec。
以上控制符可以控制cout以相应的形式进行输出。
#include<iostream>
using namespace std;
int main(){
int n_max = 42;
cout << n_max << endl;
cout<<hex;
cout<<n_max<<endl;
cout<<oct;
cout<<n_max<<endl;
return 0;
}
/*输出:
42
2a
52*/
实数型常量
两种表示方法:普通表示法、科学计数法。
着重注意科学计数法的表达。
3.14e2, 即3.14×10^2
-3.14e-2, 即-3.14×10^-2
科学计数表达中,‘e’ 可用 ‘E’替换。
布尔型常量
只有两个:true和false。但是我们不应把 true 的值看成 1,把 false 的值看成 0,它表达逻辑的“真”和“假”。
字符型常量
字符常量是括在单引号中的,如 ‘a’,‘\t’ 等。可以用来给字符型变量进行赋值,同时还能给整型变量进行赋值,即将字符对应的ASCLII码赋值给整型变量。
值得注意的是,其中有一类字符常量,以 ‘\’ 开头,如 ‘\n’, ‘\t’, ‘\r’ 等。其被称为“转义字符”。所谓“转义”指的是将‘\’之后的字符转换成其他的含义。下面是一些常用的转义字符。
转义字符 | 含义 | ASCII |
---|---|---|
\n | 换行,将输出位置移到下一行开头 | 10 |
\r | 回车,将输出位置移到本行开头 | 13 |
\t | 制表符,(类似Tab键) | 9 |
\b | 退格,输出位置回退一个字符 | 8 |
\ | 反斜杠“\” | 92 |
’ | 单引号“ ’ ” | 39 |
" | 双引号“ ’ ” | 34 |
\? | 问号“ ’ ” | 63 |
\0 | 空字符 | 0 |
\ddd (如\123) | 八进制数,代表对应字符的ASCII码 | ddd(八进制) |
\xhh(如\x61) | 十六进制数,代表对应字符的ASCII码 | hh(十六进制) |
字符串常量
字符串字面值或常量是括在双引号 “” 中的。“ ” 和 ’ ‘ 是不同的,对应变量相互之间不能赋值。
若定义字符串变量,需在头文件中包含string文件。 #include <string>
可以使用空格做分隔符,把一个很长的字符串常量进行分行。
“Hello, \
dear”
字符串中可包含转义字符。
cout << "ABCD\bEFG" << endl;
cout << "UVWX\rYZ" << endl;
/*输出:
ABCEFG
YZWX
*/
定义常量
有两种方式来定义常量;
- #define预处理器;
- const关键字。
#define 预处理器
#define定义符号常量;
#define identifier value
声明在主函数之外,不用带分号。
#include <iostream>
using namespace std;
#define LENGTH 10
#define WIDTH 5
#define NEWLINE '\n'
int main()
{
int area;
area = LENGTH * WIDTH;
cout << area;
cout << NEWLINE;
return 0;
}
//输出:50
const 关键字
const定义常变量;
const type variable = value;
需描述在主函数内,带分号,在定义时一定要赋值,之后不能对其赋值或者修改;
#include <iostream>
using namespace std;
int main()
{
const int LENGTH = 10;
const int WIDTH = 5;
const char NEWLINE = '\n';
int area;
area = LENGTH * WIDTH;
cout << area;
cout << NEWLINE;
return 0;
}
//输出:50
为什么要定义变量?
对于程序中多次出现的数值变量,用一个“常量名”代表具体的“常量值”,之后在程序中出现该“常量名”即相当于其代表的“常量值”,这样便于程序的修改,当该常量的值要改变时,不用在程序中寻找出所有的值进行修改,只需在定义变量的地方修改对应的“常量值”即可。
请注意:
- 把常量定义为大写字母形式,是一个很好的编程实践;
- 多使用符号常量,少使用数值常量,是重要的C语言变成好习惯;
- 而在C++中,连符号常量(#define)都应该少用,尽可能使用常变量(const),因为宏定义#define不包含类型信息,这种替换没有类型安全检查,有人重新修改也不会有产生警告。