C/C++ 基础笔记(二)

本篇核心知识:运算符(赋值 / 算术 / 自增自减 / 关系 / 逻辑 / 位 / 逗号)、表达式、三目运算、变量交换、二进制特性、switch 分支、循环语句、跳转语句、语法细节


一、赋值运算符

概念

双目运算符,用于给变量赋值,可与算术、位运算符组合成复合赋值运算符。

特性

  1. 只能与双目运算符 复合(如+=-=*=&=^=<<=>>=)。

  2. 不可与单目运算符复合。

  3. 优先级:最低之一,右结合。

代码示例

复制代码
int a = 10;
a += 5;   // 等价于 a = a + 5
a %= 3;   // 等价于 a = a % 3

二、运算符优先级与结合性

概念

优先级决定运算顺序;结合性决定同级运算执行方向(左→右 或 右→左)。

特性

  1. 优先级从高到低:

    • 单目(++、--、!、~、正负号)

    • 算术(* / % → + -)

    • 移位(<<>>)

    • 关系(<<=> >= → == !=)

    • 逻辑(&& → ||)

    • 三目(?:)

    • 赋值(=、+=、-=...)

    • 逗号(,)最低

  2. 结合性:

    • 单目、赋值、三目:右结合

    • 其余(算术、关系、逻辑、移位、逗号):左结合

代码示例

复制代码
int a = 2 + 3 * 4;   // 先乘后加 → a=14
int b = 10, 20, 30;  // 逗号表达式 → b=30

三、算术运算符

概念

完成加减乘除、取余等数值运算。

特性

  1. /:整数相除取整;浮点相除得小数。

  2. %仅整数可用,求余数;小数不能取余。

  3. 整数运算默认提升为 int。

代码示例

复制代码
int a = 5 / 2;      // 2(整数相除)
double b = 5.0 / 2; // 2.5
int c = 7 % 3;      // 1

四、自增 / 自减运算符

概念

对变量自身值 + 1(++)或 - 1(--),分前置后置

特性

  1. 前置(++x /--x)先变值,后使用;效率高;右结合。

  2. 后置(x++ /x--)先使用,后变值 ;优先级高于前置

  3. 仅适用于变量,不可用于常量 / 表达式。

代码示例

复制代码
int x = 1;
int a = ++x;  // x=2, a=2(先加后用)
int b = x++;  // x=3, b=2(先用后加)

相似概念比较:前置 vs 后置

前置:先运算再取值 → 可连续运算、效率高。

后置:先取值再运算 → 临时保存旧值、效率低。


五、三目运算符(条件表达式)

概念

表达式1 ? 表达式2 : 表达式3,简化 if-else。

特性

  1. 表达式 1 为真 → 执行表达式 2;为假 → 执行表达式 3。

  2. 嵌套

  3. 优先级:低于关系、逻辑;高于赋值。

代码示例

复制代码
int a = 10, b = 20;
int max = (a > b) ? a : b; // max=20

六、关系运算符

概念

比较两个数据大小关系,结果为真 (1)**或**假 (0)

特性

  1. 包括:< <= > >= == !=

  2. 连续关系(如a < b < c不合法 ,等价于(a < b) < c,易出错。

代码示例

复制代码
int a = 5, b = 10;
bool flag = (a < b);  // true → 1

七、逻辑运算符

概念

连接多个条件表达式,判断整体真假。

特性

  1. &&(逻辑与):两边全真才真短路:左假→右不执行。

  2. ||(逻辑或):一边真即真短路:左真→右不执行。

  3. !(逻辑非):取反;单目。

代码示例

复制代码
int a = 0, b = 1;
bool res1 = (a && b); // false
bool res2 = (a || b); // true

八、位运算符

概念

直接操作二进制位,运算以补码 进行,符号位参与运算

特性

  1. & 按位与:同 1 为 1,否则 0。

  2. | 按位或:有 1 为 1,否则 0。

  3. ^ 异或:相同为 0,不同为 1(原文已修正)。

  4. ~ 按位取反:0 变 1,1 变 0;单目。

  5. << 左移:高位丢弃、低位补 0;等价 ×2。

  6. >> 右移:低位丢弃、高位补符号位;等价 ÷2。

代码示例

复制代码
int a = 5;   // 0101
int b = 3;   // 0011
int c = a ^ b; // 0110 → 6

九、逗号运算符

概念

连接多个表达式,从左到右依次求值 ,结果为最后一个表达式值

特性

  1. 优先级最低

  2. 常用于 for 循环多变量控制。

代码示例

复制代码
int a = (1, 2, 3); // a=3
for (int i=0, j=10; i<j; i++, j--);

十、变量交换三种方法

概念

实现两个变量值互换。

特性

  1. 临时变量法:通用、安全、无溢出。

  2. 加减法a=a+b; b=a-b; a=a-b; → 可能溢出。

  3. 异或法a=a^b; b=a^b; a=a^b; → 无溢出、高效。

代码示例

复制代码
int a = 2, b = 3;
// 临时变量法
int c = a;
a = b;
b = c;
// 加减法
a = a + b;
b = a - b;
a = a - b;
// 异或法
a ^= b;
b ^= a;
a ^= b;

十一、2 的 N 次方二进制特性

概念

2^N 在二进制中只有 1 位为 1,其余全 0

特性

判断:x > 0 && (x & (x - 1)) == 0 → 是 2 的幂。

代码示例

复制代码
int x = 8; // 1000
bool isPower = (x & (x - 1)) == 0; // true

十二、switch 语句

概念

多分支选择语句,匹配整型常量执行对应分支。

特性

  1. 表达式必须为整型(int/char/enum)。

  2. case 后为整型常量 ,值唯一不重复

  3. default 可选,匹配失败时执行。

  4. case 内不可定义变量(作用域风险)。

  5. break :跳出 switch;无 break 会穿透

代码示例

复制代码
int score = 3;
switch (score){
      case 1: cout << "差"; break;
      case 2: cout << "中"; break;
      case 3: cout << "良"; break;
    default: cout << "无效";
}

相似概念比较:switch vs if-else

  • switch:整型常量分支、效率高、结构清晰。

  • if-else:任意条件、灵活、分支多时效率低。


十三、循环语句

概念

重复执行代码块,由循环变量、条件、增量组成。

特性

  1. for :先判断 → 执行体 → 更新;适合已知次数

  2. while先判断,后执行;可能 0 次。

  3. do-while先执行,后判断至少 1 次

代码示例

复制代码
// for
for (int i=0; i<5; i++) cout << i;
​
// while
int i=0;
while (i<5) { cout << i; i++; }
​
// do-while
i=0;
do { cout << i; i++; } while (i<5);

相似概念比较:while vs do-while

  • while:先判后做 → 可能不执行。

  • do-while:先做后判 → 至少一次。


十四、跳转语句

概念

改变程序执行流程。

特性

  1. break :跳出一层循环 /switch。

  2. continue :跳过本次循环,进入下一次判断。

  3. goto :无条件跳标签;慎用,易破坏结构。

代码示例

复制代码
for (int i=0; i<5; i++)
{
    if (i == 2) continue; // 跳过i=2
    if (i == 4) break;     // 结束循环
    cout << i;
}

十五、语法细节

概念

大括号、分号使用规则。

特性

  1. 函数 / 普通代码块 {} 不加分号

  2. 结构体 / 类定义结束 必须加分号

代码示例

复制代码
// 函数:无分号
void fun() {}
​
// 结构体:必须分号
struct Stu { int id; };
相关推荐
故事和你912 小时前
洛谷-【动态规划2】线性状态动态规划4
开发语言·数据结构·c++·算法·动态规划·图论
不吃土豆的马铃薯2 小时前
Socket 网络编程实战教程
linux·服务器·开发语言·网络·c++·算法
零号全栈寒江独钓2 小时前
c++跨平台实现日志重定向
linux·c++·windows
小成202303202652 小时前
从C到C++
开发语言·c++
longxiangam3 小时前
esp-idf dsi 屏幕的驱动实现原理—— 关于零拷贝和 DMA 永续刷新
c语言·单片机·嵌入式硬件
葱卤山猪3 小时前
C++17 联合体
开发语言·c++
不会C语言的男孩3 小时前
C++ Primer Plus 第9章:内存模型和名称空间
开发语言·c++
zz34572981133 小时前
函数:python与c语言
c语言·开发语言·python
愿天垂怜3 小时前
【C++脚手架】gtest 单元测试库的介绍与使用
linux·服务器·c++·gitee·前端框架·gtest