基本数据类型¶
数据类型(Data Type)是一种属性,它告诉编译器如何解释存储在计算机内存中的某段数据。
数据类型决定了存储方式、占用空间、取值范围、以及能够对数据执行哪些操作和类型的检查与转换。
C++ 拥有非常强大的类型系统(Type System)支持多种数据类型包括基本数据类型、复合数据类型、自定义数据类型。
本篇主要讲解 C++ 的基本数据类型(Fundamental Types)以及相关的类型转换机制。
整数型¶
整数型可以理解为在内存中开辟一个专门用于存储整数的空间,根据要存放的数字大小可以采用不同的整数型关键字来开辟所需大小的空间。
类型 |
占用字节 |
存储范围 |
|---|---|---|
|
2 |
|
|
4 |
|
|
4 或 8 |
依赖于系统和编译器 |
|
8 |
|
固定宽度整数类型¶
从 C++ 11 开始引入了固定宽度整数类型,确保在不同平台上具有相同的大小。
类型 |
说明 |
存储范围 |
|---|---|---|
|
8 位有符号整数 |
-128 到 127 |
|
8 位无符号整数 |
0 到 255 |
|
16 位有符号整数 |
-32,768 到 32,767 |
|
16 位无符号整数 |
0 到 65,535 |
|
32 位有符号整数 |
-2,147,483,648 到 2,147,483,647 |
|
32 位无符号整数 |
0 到 4,294,967,295 |
|
64 位有符号整数 |
-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 |
|
64 位无符号整数 |
0 到 18,446,744,073,709,551,615 |
浮点型¶
对于需要存储小数的场景,我们需要使用浮点数据类型来存储,例如:3.14。浮点数用于表示实数,可以表示非常大或非常小的数值,但精度有限。
类型 |
占用字节 |
存储范围 |
|---|---|---|
|
4 字节 |
1e-38 到 1e38 |
|
8 字节 |
1e-308 到 1e308 |
|
8、12 或 16 字节 |
比 |
注意
浮点类型可以表示非常大或非常小的数,但它们只能近似地表示小数,因为它们在内存中的表示是基于二进制分数的。
浮点类型在计算机中的表示有时会导致出现精度问题,因此在需要进行精确计算的场景(如金融计算)中,应该考虑使用专门的库或整数类型(如定点数)而不是浮点类型。
字符型¶
字符型用于存储单个字符,如字母、数字、标点符号等。C++ 提供了多种字符类型以支持不同的字符集。
类型 |
占用字节 |
说明 |
|---|---|---|
|
1 |
用于存储单个字符,通常是 ASCII 字符。 |
|
2 或 4 |
宽字符类型,大小取决于编译器 |
|
2 |
16 位字符类型,用于 UTF-16 编码(C++11 起) |
|
4 |
32 位字符类型,用于 UTF-32 编码(C++11 起) |
布尔型¶
布尔型也可以称之为逻辑型,这个数据类型只能存储 true (真) / false (假) 两个值。布尔型常用于需要进行逻辑判断的场景。
类型 |
占用字节 |
存储范围 |
|---|---|---|
|
1 |
只能是 |
空类型¶
空类型代表着没有类型,它不能用于声明变量,主要使用场景是表示函数没有返回值或者函数不需要接收参数。
类型 |
说明 |
|---|---|
|
不表示任何实际的数据类型,用于函数返回值或参数列表 |
类型修饰符¶
C++ 提供了几种类型修饰符,可以修改基本数据类型的范围或行为
符号修饰符¶
在 C++ 中,有些类型(如 int、char、int8_t 等)分为 有符号(signed)和无符号(unsigned) 两种,核心区别是:是否能表示负数、二进制最高位的用途、数值范围。
对比项 |
有符号类型 |
无符号类型 |
|---|---|---|
能否存负数 |
可以 |
不可以(只能 ≥ 0) |
最高位含义 |
是符号位(0 = 正,1 = 负) |
是数值位(参与计算) |
取值范围 |
正负对半分 |
从 0 开始到更大的正数 |
位数相同,无符号类型能表示的正数更大,有符号类型能表示负数。
大小修饰符¶
大小修饰符用于修改整数类型的大小与表示范围,主要作用于 int。
修饰符 |
含义 |
示例 |
|---|---|---|
short |
更小整数 |
short int |
long |
更大整数 |
long int |
long long |
更大的整数 |
long long int |