C++ 数据类型总结
一、 整型(Integer Types)
1. int 类型
-
大小与范围:
- 通常占用 4 字节 (Byte),即 32 比特 (bit)。
- 带符号 (
signed int) 范围:−231∼231−1 (约 ±2.14×109)。
- 无符号 (
unsigned int) 范围:0∼232−1 (约 4.29×109)。
-
最大/最小值的表示 (32位):
| 类型 |
十六进制 (HEX) |
十进制 (DEC) |
int 最大值 |
7FFFFFFF |
2,147,483,647 |
unsigned int 最大值 |
FFFFFFFF |
4,294,967,295 |
cout << sizeof(123) << " " << sizeof(int) << endl;
// 输出: 4 4
2. long long 类型
- 大小: 通常占用 8 字节。
- 声明
long long 常量: 整数常量后加后缀 ll 或 LL。
cout << sizeof(123456789123456789) << " " << sizeof(long long) << endl;
// 输出: 8 8
cout << sizeof(123ll) << " " << sizeof(456LL) << endl;
// 输出: 8 8
typedef long long LL;
// LL a = 123;
// cout << a << " " << sizeof(a) << endl; // 输出: 123 8
- 使用场景:
- 数据范围明显超出
int (超过 2×109)。
- 大数求和可能导致溢出 (如 106 个
int 范围的数字求和)。
- 计算较大阶乘 (如 20! )。
3. short 和 long 类型
| 操作系统 |
long 字节数 |
数值范围 |
| Windows (32/64位) |
4B |
−231∼231−1 |
| Linux (64位) |
8B |
−263∼263−1 |
二、 浮点型(Floating-Point Types)
| 名称 |
数据类型 |
字节数 |
有效位数 |
数值范围 |
| 单精度浮点数 |
float |
4B |
6-7位 |
±3.4×1038 左右 |
| 双精度浮点数 |
double |
8B |
15-16位 |
±1.7×10308 左右 |
1. 科学计数法表示
- 形式:
[+|-]Digits[.Digits][e|E][+|-]Digits
- 示例:
1.23E10 (1.23×1010), 0.23E-4 (0.23×10−4)
2. 类型后缀
- 浮点型常量默认为
double 类型。
- 后缀
f 或 F:float 类型 (如 1.23f)。
- 后缀
L:long double 类型 (如 45.e+23L)。
cout << sizeof(1.23) << endl; // 8 (默认 double)
cout << sizeof(1.23f) << endl; // 4
3. 保留指定小数位数(格式化输出)
- 需要引入库
#include<iomanip>。
- 使用
setprecision(n) 设置总共显示的有效数字位数。
- 使用
fixed 和 setprecision(n) 才能设置固定保留 n 位小数。
// 示例(假设 PI = 3.14159265358)
cout << PI << endl; // 输出: 3.14
cout << setprecision(6) << PI << endl; // 输出: 3.14
cout << fixed << setprecision(6) << PI << endl; // 输出: 3.140000
三、 布尔类型(Boolean Type)
| 名称 |
数据类型 |
字节数 |
数值范围 |
| 布尔 |
bool |
1B (通常) |
true 或 false |
1. 声明和赋值
- 可以直接赋值为
true 或 false。
- 整数赋值:非 0 转换为
true,0 转换为 false。
bool a = true, b = false;
bool c = 1, d = 0; // c为true, d为false
2. 输出
- 布尔值输出时被转换为整数:
true 输出 1,false 输出 0。
cout << true << " " << false; // 输出: 1 0
C++ 关系运算 (Relational Operators)
关系运算符用于比较数值的大小关系,表达式的值是布尔值(true 或 false)。
| 大小关系 |
数学符号 |
C++ 关系运算符 |
| 小于 |
< |
< |
| 大于 |
> |
> |
| 大于等于 |
≥ |
>= |
| 小于等于 |
≤ |
<= |
| 等于 |
= |
== |
| 不等于 |
= |
!= |
关系运算表达式示例
| 表达式 |
结果 (布尔值) |
结果 (整数值) |
解释 |
1 > 2 |
false |
0 |
1 不大于 2 |
1 < 2 |
true |
1 |
1 小于 2 |
1 == 2 |
false |
0 |
1 不等于 2 |
2 == 2 |
true |
1 |
2 等于 2 |
1 + 2 == 3 |
3 等于 3 |
2.8 * 3.5 >= 3 |
9.8≥3 |
2 <= 2 |
2 小于等于 2 |
1 != 2 |
1 不等于 2 |
1 <= 2 |
1 小于等于 2 |
2 != 2 |
false |
0 |
2 不等于 2 是假的 |
(1 < 2) == false |
true == false 是 false |
(a = 3) == 3 |
true |
1 |
先赋值 a=3,然后判断 3==3 |
C++ 逻辑运算 (Logical Operators)
逻辑运算符用于组合或否定布尔值(或关系表达式),表达式的值是布尔值(true 或 false)。
| 含义 |
逻辑运算符 |
| 逻辑与 |
&& |
| 逻辑或 |
|| |
| 逻辑非 |
! |
逻辑运算真值表
| A |
B |
A && B (逻辑与) |
A || B (逻辑或) |
!A (逻辑非) |
| 1 (true) |
1 (true) |
1 |
1 |
0 |
| 0 (false) |
0 |
| 0 (false) |
1 (true) |
1 |
| 0 (false) |
0 |
- 注: 表中 1 表示真(
true),0 表示假(false)。
逻辑运算表达式示例
| 目的 |
C++ 表达式 |
解释 |
| 判断一个数 a 是否满足 2<a≤5 |
a > 2 && a <= 5 |
a 必须同时大于 2 并且小于等于 5 |
| 判断一个数是否是偶数 或 5 的倍数 |
`a % 2 == 0 |
|
| 判断一个数是否不是偶数 |
!(a % 2 == 0) |
对 a 是偶数的结果进行取反 |
倍数判断
对于整数 a,b:
- a 是 b 的倍数 ⇔ b 是 a 的因数 ⇔ a 能被 b 整除 ⇔
a % b == 0
运算符优先级(部分)
在 C++ 中,运算符的优先级决定了表达式中运算执行的顺序。下表列出了一些常用运算符的优先级(从高到低):
| 优先级 |
运算符 |
类型 |
示例 |
| 最高 |
! |
单目运算符 (逻辑非) |
!a |
| 较高 |
*, /, % |
双目运算符 (乘、除、取模) |
a * b |
| 中等 |
+, - |
双目运算符 (加、减) |
a + b |
>, >=, <, <= |
关系运算符 |
a > b |
| 较低 |
==, != |
关系运算符 (等于、不等于) |
a == b |
&& |
逻辑运算符 (逻辑与) |
a && b |
| **` |
|
`** |
| 最低 |
=, +=, -= 等 |
赋值运算符 |
a = 3 |
总结: 逻辑非 ! 的优先级很高,乘除取模的优先级高于加减,关系运算符的优先级高于逻辑运算符。
在复杂的表达式中,不确定时建议使用括号 () 来明确运算顺序。
四、 关系运算与转义字符
1. 常用转义字符
| 名称 |
字符形式 |
作用 |
| 换行 (NewLine) |
\n |
换行 |
| 水平制表 (HorizontalTab) |
\t |
制表位 (Tab) |
| 反斜杠 (backslash) |
\\ |
打印反斜杠 |
cout << "我是\n一鸣\t老师\n";
// 输出:
// 我是
// 一鸣 老师
五、 数据类型隐式转换
- 定义: 编译器自动执行的类型转换过程,通常是从较小范围或低精度类型向较大范围或高精度类型的转换,以避免数据丢失。
| 运算 |
转换后 (Result Type) |
(int) + (float) |
(float) |
(int) + (double) |
(double) |
(double) + (float) |