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; };
相关推荐
知识分享小能手6 分钟前
C++ 学习教程,从入门到精通,C++类继承 — 完整知识点详解(13)
开发语言·c++·学习
YYRAN_ZZU7 分钟前
如何编一个gcc的交叉工具链
linux·c++
Navigator_Z32 分钟前
LeetCode //C - 1276. Number of Burgers with No Waste of Ingredients
c语言·算法·leetcode
Frank_refuel35 分钟前
【C++】手撕JRpc框架(梳理RPC流程)
c++
wuminyu44 分钟前
JVM虚拟线程的底层实现原理分析
java·linux·c语言·jvm·c++
keyipatience1 小时前
跳表详细解析
开发语言·数据结构·c++·算法·跳表
汉克老师1 小时前
GESP2026年9月认证C++一级( 第一部分选择题(8~15题)精讲
c++·gesp·小学生·学c++编程
小小、码农1 小时前
〖Linux文件系统〗:彻底打通文件 IO 全链路
linux·开发语言·数据结构·c++·系统
東隅已逝,桑榆非晚1 小时前
priority_queue的介绍和使用
c++·经验分享·笔记·学习
茉莉玫瑰花茶2 小时前
OpenGL [ 纹理 ]
开发语言·c++·opengl