一、数据类型 
 
以下是C++数据类型与运算符的详解,结合表格和说明呈现:
 
1. 基本数据类型
 
| 类型 | 大小 (字节) | 取值范围 | 示例 | 
|---|
| bool | 1 | true/false | bool flag = true; | 
| char | 1 | -128127 或 0255 | char c = 'A'; | 
| signed char | 1 | -128~127 | signed char sc = -10; | 
| unsigned char | 1 | 0~255 | unsigned char uc = 200; | 
| short | 2 | -32,768~32,767 | short s = 100; | 
| int | 4 (通常) | -2³¹ ~ 2³¹-1 | int i = -5000; | 
| long | 4 或 8 | -2³¹ ~ 2³¹-1 或 -2⁶³~2⁶³-1 | long l = 100000; | 
| long long | 8 | -2⁶³ ~ 2⁶³-1 | long long ll = 1e18; | 
| float | 4 | ±3.4e-38 ~ ±3.4e38 | float f = 3.14f; | 
| double | 8 | ±1.7e-308 ~ ±1.7e308 | double d = 2.71828; | 
| void | - | 无值 | void func(); | 
 
 注意:
 - 具体大小取决于编译器和操作系统(如 int在16位系统中为2字节)。
- C++11新增:char16_t(2字节),char32_t(4字节) 用于Unicode。
 
 
2. 派生数据类型
 
| 类型 | 描述 | 示例 | 
|---|
| 指针 | 存储内存地址 | int* p = &i; | 
| 数组 | 同类型元素的集合 | int arr[5] = {1,2,3}; | 
| 引用 | 变量的别名(必须初始化) | int& ref = i; | 
| 结构体 | 用户自定义的复合数据类型 | struct Point { int x,y; }; | 
| 类 | 面向对象的核心 | class Student { ... }; | 
| 枚举 | 命名整数常量集合 | enum Color {RED, GREEN}; | 
| 联合体 | 共享内存的不同类型成员 | union Data { int i; float f; }; | 
 
 
二、C++ 运算符
 
1. 算术运算符
 
| 运算符 | 功能 | 示例 | 结果 | 
|---|
| + | 加法 | 3 + 2 | 5 | 
| - | 减法 | 5 - 3 | 2 | 
| * | 乘法 | 4 * 5 | 20 | 
| / | 除法 | 10 / 3 | 3(整数除) | 
| % | 取模 | 10 % 3 | 1 | 
| ++ | 自增 | int a=5; a++; | a=6 | 
| -- | 自减 | int b=4; --b; | b=3 | 
 
 注意:
 - 整数除法会截断小数部分(10/3=3)。
- 自增/自减分前置(先计算后赋值)和后置(先赋值后计算)。
 
 
2. 关系运算符
 
| 运算符 | 含义 | 示例 | 结果 | 
|---|
| == | 等于 | 5 == 3 | false | 
| != | 不等于 | 5 != 3 | true | 
| > | 大于 | 5 > 3 | true | 
| < | 小于 | 5 < 3 | false | 
| >= | 大于等于 | 5 >= 5 | true | 
| <= | 小于等于 | 4 <= 3 | false | 
 
 
3. 逻辑运算符
 
| 运算符 | 功能 | 示例 | 结果 | 
|---|
| && | 逻辑与 | (5>3) && (2<1) | false | 
| `\ | \ | ` | 逻辑或 | 
| ! | 逻辑非 | !(5>3) | false | 
 
 
4. 位运算符
 
| 运算符 | 功能 | 示例 | 结果(二进制) | 
|---|
| & | 按位与 | 5 & 3(101 & 011) | 001(1) | 
| `\ | ` | 按位或 | `5 \ | 
| ^ | 按位异或 | 5 ^ 3 | 110(6) | 
| ~ | 取反 | ~5 | 补码形式(如 -6) | 
| << | 左移 | 5 << 1 | 1010(10) | 
| >> | 右移 | 5 >> 1 | 10(2) | 
 
 
5. 赋值运算符
 
| 运算符 | 等价形式 | 示例 | 效果 | 
|---|
| = | - | a = 5; | 赋值 | 
| += | a = a + b | a += 3; | 加后赋值 | 
| -= | a = a - b | a -= 2; | 减后赋值 | 
| *= | a = a * b | a *= 4; | 乘后赋值 | 
| /= | a = a / b | a /= 2; | 除后赋值 | 
| %= | a = a % b | a %= 3; | 取模后赋值 | 
 
 
6. 特殊运算符
 
| 运算符 | 功能 | 示例 | 
|---|
| ? : | 三元条件运算符 | int max = (a>b) ? a : b; | 
| sizeof() | 返回类型/对象大小 | sizeof(int)→4 | 
| , | 逗号运算符(顺序求值) | a = (b=3, b+2);→a=5 | 
| :: | 作用域解析 | std::cout | 
| typeid() | 获取类型信息 | typeid(int).name()→"i" | 
| dynamic_cast | 安全向下转型 | dynamic_cast<Derived*>(base_ptr) | 
 
 
三、关键概念详解
 
1. 数据类型转换
 
| 转换类型 | 描述 | 示例 | 
|---|
| 隐式转换 | 编译器自动进行 | int i = 3.14;→i=3(截断) | 
| 显式转换 | 强制类型转换 | double d = (double)5/2;→d=2.5 | 
| C++风格转换 | 更安全的转换方式 | static_cast<double>(5)/2 | 
 
2. 运算符优先级(部分)
 
| 优先级 | 运算符 | 结合性 | 
|---|
| 1 | ::(作用域) | 左到右 | 
| 2 | ++,--,sizeof,!,~ | 右到左 | 
| 3 | *,/,% | 左到右 | 
| 4 | +,- | 左到右 | 
| 5 | <<,>> | 左到右 | 
| 6 | <,<=,>,>= | 左到右 | 
| 7 | ==,!= | 左到右 | 
| 12 | && | 左到右 | 
| 13 | `\ | \ | 
| 15 | ? : | 右到左 | 
| 16 | =,+=,-=等赋值运算符 | 右到左 | 
 
 口诀:
 括号成员第一;全体单目第二;乘除余三,加减四;移位五,关系六;等与不等排第七;位与异或和位或;逻辑与或三二一。
 
 
 
四、示例代码
 
#include <iostream>
using namespace std;int main() {// 数据类型示例double pi = 3.14159;int truncated = static_cast<int>(pi); // 显式转换: 3// 运算符综合int a = 10, b = 3;int mod = a % b;      // 取模: 1bool cmp = (a >= 10); // 比较: trueint bitwise = a << 2; // 左移2位: 40// 三元运算符   也叫  三目运算符string result = (b > 0) ? "Positive" : "Negative";cout << "Mod: " << mod << "\nBitwise: " << bitwise << endl;return 0;
}
 
 
五、避坑指南
 
- 整数溢出:
 unsigned char c = 300;→ 溢出(300 > 255),行为未定义!
- 浮点精度陷阱:
 0.1 + 0.2 != 0.3(二进制浮点无法精确表示0.1)。
- 指针野引用:
 int* p; *p = 10;→ 未初始化的指针导致崩溃。
- 运算符优先级混淆:
 int x = 5 + 3 * 2;→x=11(乘法优先级高于加法)。
 掌握这些核心知识,相当于打通C++内功的“任督二脉”,后续修炼面向对象和模板等高级境界将事半功倍!