简介
这篇文章介绍的是C++中的数据类型、运算符和表达式。
C++中的每一个常量或者是变量都有一个数据类型。常见的数据类型分成3类:基本类型、导出类型、用户定义类型。
1.C++中的数据类型
这里进介绍基本数据类型和基本数据类型的派生类型。
1.基本类型
1.字符型
字符型使用关键字char表示,因此称为char型。字符型的取值范围是全部基本字符以及ASCII码集或者扩充ASCII码集对应的全部符号。字符型数据占用一个字节。字符集和单字节证书是根据ASCII码对应的。因此可以把字符看成用来表示单字节整数的类型。字符和ASCII值的对应关系如下表:
| 字符 | ASCII 值 |
|---|---|
| A | 65 |
| B | 66 |
| C | 67 |
| ... | ... |
| a | 97 |
| b | 98 |
| c | 99 |
| ... | ... |
| 0 | 48 |
| 1 | 49 |
| 2 | 50 |
| ... | ... |
| 空格 | 32 |
| 换行 | 10 |
我们可以调用static_cast函数获取字符串对应的ASCII值。我们可以调用下面的代码打印出字符对应的ASCII值。
在 C++ 中,你可以使用 <limits> 头文件中的 std::numeric_limits 模板来获取有符号字符类型的最大值和最小值。这个模板提供了一个 min() 方法和一个 max() 方法,用于获取给定类型的最小值和最大值。
有符号字符型取值范围为-128-127。
无符号字符型取值范围为0~255.
我们可以使用下面的代码打印出字符对应的ASCII码以及无符号和有符号字符的最大值和最小值。
#include <iostream>
using namespace std;
int main() {
// 打印小写字母的 ASCII 编码
cout << "小写字符对应的 ASCII 值:" << endl;
for (char ch = 'a'; ch <= 'z'; ++ch) {
cout << ch << ": " << static_cast<int>(ch) << endl;
}
// 打印大写字母的 ASCII 编码
cout << "\n大写字符对应的ASCII值:" << endl;
for (char ch = 'A'; ch <= 'Z'; ++ch) {
cout << ch << ": " << static_cast<int>(ch) << endl;
}
char space = ' ';
cout << "空格对应的ASCII: " << static_cast<int>(space)<< endl;
cout << "空格对应的ASCII: " << static_cast<int>('\n') << endl;
// 有符号字符的最小值和最大值
std::cout << "有符号字符的最小值: " << static_cast<int>(std::numeric_limits<signed char>::min()) << std::endl;
std::cout << "有符号字符的最大值: " << static_cast<int>(std::numeric_limits<signed char>::max()) << std::endl;
// 无符号字符的最小值和最大值
std::cout << "无符号字符的最小值: " << static_cast<int>(std::numeric_limits<unsigned char>::min()) << std::endl;
std::cout << "无符号字符的最小值: " << static_cast<int>(std::numeric_limits<unsigned char>::max()) << std::endl;
return 0;
}
控制台的打印信息为:
小写字符对应的 ASCII 值:
a: 97
b: 98
c: 99
d: 100
e: 101
f: 102
g: 103
h: 104
i: 105
j: 106
k: 107
l: 108
m: 109
n: 110
o: 111
p: 112
q: 113
r: 114
s: 115
t: 116
u: 117
v: 118
w: 119
x: 120
y: 121
z: 122
大写字符对应的ASCII值:
A: 65
B: 66
C: 67
D: 68
E: 69
F: 70
G: 71
H: 72
I: 73
J: 74
K: 75
L: 76
M: 77
N: 78
O: 79
P: 80
Q: 81
R: 82
S: 83
T: 84
U: 85
V: 86
W: 87
X: 88
Y: 89
Z: 90
空格对应的ASCII: 32
空格对应的ASCII: 10
有符号字符的最小值: -128
有符号字符的最大值: 127
无符号字符的最小值: 0
无符号字符的最小值: 255
2.逻辑型
逻辑型使用关键字bool关键字表示,也称为布尔型。逻辑型只有两个值:true和false。
true对应整数1,表示为真。
false对应整数0,表示为假。
3.整型
整型使用关键字int表示。整型数据所占据的存储空间大小根据机器的不同而不同。
4.浮点型
浮点类型包括单精度浮点型和双精度浮点型。
单精度浮点型使用float关键字表示,又称为float型,取值范围为-3.4E38~3.4E38,但不能超过7位有效数字。
双精度浮点型使用double关键字表示,又称为double型,取值范围为-1.7977E308~1.7977E308,但不能超过15位有效数字。
5.空值类型
空值型使用关键字void表示,因此成为void型。
2.基本类型的派生类型
基本数据的字长及其取值范围可以放大和缩小,改变后的类型就叫做基本数据类型的派生类型。
派生类型声明符由基本数据类型和基本类型的派生类型修饰符组成。
类型修饰符包括:short long signed unsigned。
2.常量
1.逻辑常量
2.字符常量
字符常量使用单引号中间加一个字符组成。
转义字符也属于字符常量。
字符串常量使用双引号加字符组成。
3.整型常量
1.十进制整型
以+或者-开头,开头为非0的一串字符串组成。
例如:11、23。
2.八进制整型
以数字0开头。默认为整数。
例如:0123
3.十六进制整型
以0x开头。
例如:0x9A。
4.实数
实数包括十进制的定点和浮点数。
1.定点数
十进制的定点数称为定点数,以小数的形式表示实数。
例如:123、123.45、-123.1、-199.123。
2.浮点数
在C++中,实型常量是指浮点数常量,包括单精度浮点数、双精度浮点数和长双精度浮点数。实型常量可以表示小数或科学计数法表示的数字。
1.单精度浮点数常量
单精度浮点数常量以f 或F 结尾。
单精度浮点型常量占用4个字节,提供7位有效数字。
float f1 = 3.14f;
float f2 = 1.5F;
2.双精度浮点数常量
双精度浮点数常量没有后缀,或以 d 或 D 结尾。
双精度浮点型常量占用8个字节,提供15位有效数字。
double d1 = 3.14;
double d2 = 2.71828d;
double d3 = 6.022e23; // 科学计数法表示
3.长双精度浮点数常量
长双精度浮点数常量以 l 或 L 结尾。
long double精度浮点型常量占用10个字节,提供19位有效数字。
long double ld1 = 3.14l;
long double ld2 = 1.23456789L;
5.枚举常量
枚举常量是枚举类型中定义的值,也被成为枚举值。
声明格式如下:
enum 类型名{枚举值列表};
例如我们可以定义水果的枚举值:
enum fruit{
apple,
orange =2,
watermelon
}
如果第i个枚举值赋值给常量么,后续的枚举值为m+1,m+2...直到下一个赋了值的枚举值或者结束。
例如在上面的例子中,watermelon值为3,apple值为0.
3.变量
1.变量的定义
变量声明语法格式如下:
[存储类] 类型名 变量名 [= 初始表达式];
存储类有四种:aotu、register、static、extern,默认值位auto。可以省略这个存储类(按照auto处理)。
类型名可以是基本数据类型如int、float、double、bool、chart等,也可以是用户定义的类型。
初值表达式是一个表达式,可以省略。
实例代码如下:
int result =10;
2.变量的使用方式
1.全局变量和局部变量
全局变量是在所有函数定义、类定义和程序块之外声明的变量。未进行专门初始化的全局变量会被系统自动初始化为0。全局变量的作用范围是从定义变量的位置开始知道整个程序的结束。
局部变量是在某个函数定义、类定义和程序块之内声明的变量。局部变量只能在声明它的函数、类或程序块中被访问。
2.生存期与作用域
全局变量的生存期是从声明开始直到程序结束。
局部变量的生存期是从声明开始,知道包含此变量的最近的一个程序块结束。
3.变量的存储类属性
1.auto
自动变量。
默认存储类别。占用存储空间的分配和释放工作由系统自动完成。
2.register
寄存器变量。可能以寄存器作为其存储空间,寄存器不够用的时候,按照auto变量处理。
3.static
静态变量。一直到程序结束生存期才终止。
4.extern
外部变量。
4.typedef类型说明
使用关键字typedef可以将已有类型定义为新类型名。格式如下:
typedef 已有类型 新类型名
例如:
typedef int INT;
typedef double R;
typedef short SHORT;
type float FLOAT;
3.符号常量声明语句
1.符号常量的声明
2.使用#define定义符号常量
4.运算符和表达式
1.运算符和表达式的概念
在C++中,运算符(operators)是用于执行特定操作的符号或关键字。表达式(expressions)是由运算符、操作数和其他表达式组成的组合,它们用于计算某个值。
按照运算分量个数的多少可以将运算符分成单目运算符、双目运算符、三目运算符。
2.赋值运算
1.赋值表达式
赋值表达式的格式如下:
变量名 = 表达式;
例如:
int a;
a= 10;
2.特殊类型的赋值
将实数赋值的时候,将会丢失小数部分。
例如在下面的例子中,a = 1;
int a = 4/3;
可以使用赋值类型给多个变量赋值:
x = y =4;
C++中赋值运算符的顺序是从右到左。
3.算数运算符和算数表达式
1.单目运算符
-:单减运算符
++:增量运算符
--:减量运算符
b = a++;等价于b=a;a =a +1;
b =++a;等价于a = a+ 1;b = a;
2.双目运算符
+:加
-:减
*:乘
/:除
%:取余
3.三目运算符
a<<b?c:d;
4.关系运算符和关系表达式
<、>、=、》=、<=、!=、==
5.逻辑运算符和逻辑表达式
!非
&&:且
||:或
6.位运算
&:按位与运算
|:按位或运算
^:按位亦或运算
>>:右移运算符
<<:左移运算符
~:取反运算符
7.其它运算
1.条件运算符
a>b?1:0; //表达式为1
2.逗号运算符
从左到右运算,返回最后一个表达式的值
a = (3+4,5+7,2+1);//a=3
a = 3*3,a+6,a+7;//a=16
3.sizeof运算符
返回运算符在内存中占用的字节数。
8.运算符和结合性
在C++中,运算符的优先级确定了它们在表达式中被执行的顺序。当一个表达式中包含多个运算符时,优先级决定了哪些运算符会先被执行,哪些会后执行。以下是C++中一些常见运算符的优先级,按照从高到低的顺序排列:
1. **括号**:`()`(括号中的表达式具有最高优先级)。
2. **成员选择和指针成员选择**:`->`、`.`。
3. **后缀递增/递减**:`++`、`--`。
4. **前缀递增/递减**:`++`、`--`。
5. **一元运算符**:`+`(正)、`-`(负)、`!`(逻辑非)、`~`(按位取反)、`*`(指针取值)、`&`(取地址)、`sizeof`、`typeid` 等。
6. **乘法和除法**:`*`、`/`、`%`。
7. **加法和减法**:`+`、`-`。
8. **移位运算符**:`<<`、`>>`。
9. **关系运算符**:`<`、`<=`、`>`、`>=`。
10. **相等性运算符**:`==`、`!=`。
11. **按位与**:`&`。
12. **按位异或**:`^`。
13. **按位或**:`|`。
14. **逻辑与**:`&&`。
15. **逻辑或**:`||`。
16. **条件运算符**:`?:`。
17. **赋值运算符**:`=`, `+=`, `-=`, `*=`, `/=`, `%=` 等。
18. **逗号运算符**:`,`(具有最低优先级,在表达式中从左到右依次执行)。
当表达式中存在多个运算符时,按照优先级从高到低的顺序依次执行。在表达式中使用括号可以改变运算符的执行顺序。
175

被折叠的 条评论
为什么被折叠?



