《第二章-内功筑基》 C++修炼生涯笔记(基础篇)数据类型与运算符

一、数据类型 

以下是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(base_ptr)

三、关键概念详解

1. 数据类型转换
转换类型 描述 示例
隐式转换 编译器自动进行 int i = 3.14;i=3 (截断)
显式转换 强制类型转换 double d = (double)5/2;d=2.5
C++风格转换 更安全的转换方式 static_cast(5)/2
2. 运算符优先级(部分)
优先级 运算符 结合性
1 :: (作用域) 左到右
2 ++, --, sizeof, !, ~ 右到左
3 *, /, % 左到右
4 +, - 左到右
5 <<, >> 左到右
6 <, <=, >, >= 左到右
7 ==, != 左到右
12 && 左到右
13 `\ \
15 ? : 右到左
16 =, +=, -= 等赋值运算符 右到左

口诀
括号成员第一;全体单目第二;乘除余三,加减四;移位五,关系六;等与不等排第七;位与异或和位或;逻辑与或三二一。


四、示例代码

#include 
using namespace std;

int main() {
    // 数据类型示例
    double pi = 3.14159;
    int truncated = static_cast(pi); // 显式转换: 3

    // 运算符综合
    int a = 10, b = 3;
    int mod = a % b;      // 取模: 1
    bool cmp = (a >= 10); // 比较: true
    int bitwise = a << 2; // 左移2位: 40

    // 三元运算符   也叫  三目运算符
    string result = (b > 0) ? "Positive" : "Negative";

    cout << "Mod: " << mod << "\nBitwise: " << bitwise << endl;
    return 0;
}

五、避坑指南

  1. 整数溢出
    unsigned char c = 300; → 溢出(300 > 255),行为未定义!
  2. 浮点精度陷阱
    0.1 + 0.2 != 0.3(二进制浮点无法精确表示0.1)。
  3. 指针野引用
    int* p; *p = 10; → 未初始化的指针导致崩溃。
  4. 运算符优先级混淆
    int x = 5 + 3 * 2;x=11(乘法优先级高于加法)。

掌握这些核心知识,相当于打通C++内功的“任督二脉”,后续修炼面向对象和模板等高级境界将事半功倍!

你可能感兴趣的:(C++,c++,开发语言,visual,studio,code,数据结构,linux,笔记)