本篇核心知识:运算符(赋值 / 算术 / 自增自减 / 关系 / 逻辑 / 位 / 逗号)、表达式、三目运算、变量交换、二进制特性、switch 分支、循环语句、跳转语句、语法细节
一、赋值运算符
概念
双目运算符,用于给变量赋值,可与算术、位运算符组合成复合赋值运算符。
特性
-
只能与双目运算符 复合(如
+=、-=、*=、&=、^=、<<=、>>=)。 -
不可与单目运算符复合。
-
优先级:最低之一,右结合。
代码示例
int a = 10;
a += 5; // 等价于 a = a + 5
a %= 3; // 等价于 a = a % 3
二、运算符优先级与结合性
概念
优先级决定运算顺序;结合性决定同级运算执行方向(左→右 或 右→左)。
特性
-
优先级从高到低:
-
单目(++、--、!、~、正负号)
-
算术(* / % → + -)
-
移位(<<>>)
-
关系(<<=> >= → == !=)
-
逻辑(&& → ||)
-
三目(?:)
-
赋值(=、+=、-=...)
-
逗号(,)最低
-
-
结合性:
-
单目、赋值、三目:右结合
-
其余(算术、关系、逻辑、移位、逗号):左结合
-
代码示例
int a = 2 + 3 * 4; // 先乘后加 → a=14
int b = 10, 20, 30; // 逗号表达式 → b=30
三、算术运算符
概念
完成加减乘除、取余等数值运算。
特性
-
/:整数相除取整;浮点相除得小数。 -
%:仅整数可用,求余数;小数不能取余。 -
整数运算默认提升为 int。
代码示例
int a = 5 / 2; // 2(整数相除)
double b = 5.0 / 2; // 2.5
int c = 7 % 3; // 1
四、自增 / 自减运算符
概念
对变量自身值 + 1(++)或 - 1(--),分前置 与后置。
特性
-
前置(++x /--x) :先变值,后使用;效率高;右结合。
-
后置(x++ /x--) :先使用,后变值 ;优先级高于前置。
-
仅适用于变量,不可用于常量 / 表达式。
代码示例
int x = 1;
int a = ++x; // x=2, a=2(先加后用)
int b = x++; // x=3, b=2(先用后加)
相似概念比较:前置 vs 后置
前置:先运算再取值 → 可连续运算、效率高。
后置:先取值再运算 → 临时保存旧值、效率低。
五、三目运算符(条件表达式)
概念
表达式1 ? 表达式2 : 表达式3,简化 if-else。
特性
-
表达式 1 为真 → 执行表达式 2;为假 → 执行表达式 3。
-
可嵌套。
-
优先级:低于关系、逻辑;高于赋值。
代码示例
int a = 10, b = 20;
int max = (a > b) ? a : b; // max=20
六、关系运算符
概念
比较两个数据大小关系,结果为真 (1)**或**假 (0)。
特性
-
包括:
< <= > >= == !=。 -
连续关系(如
a < b < c)不合法 ,等价于(a < b) < c,易出错。
代码示例
int a = 5, b = 10;
bool flag = (a < b); // true → 1
七、逻辑运算符
概念
连接多个条件表达式,判断整体真假。
特性
-
&&(逻辑与):两边全真才真 ;短路:左假→右不执行。 -
||(逻辑或):一边真即真 ;短路:左真→右不执行。 -
!(逻辑非):取反;单目。
代码示例
int a = 0, b = 1;
bool res1 = (a && b); // false
bool res2 = (a || b); // true
八、位运算符
概念
直接操作二进制位,运算以补码 进行,符号位参与运算。
特性
-
&按位与:同 1 为 1,否则 0。 -
|按位或:有 1 为 1,否则 0。 -
^异或:相同为 0,不同为 1(原文已修正)。 -
~按位取反:0 变 1,1 变 0;单目。 -
<<左移:高位丢弃、低位补 0;等价 ×2。 -
>>右移:低位丢弃、高位补符号位;等价 ÷2。
代码示例
int a = 5; // 0101
int b = 3; // 0011
int c = a ^ b; // 0110 → 6
九、逗号运算符
概念
连接多个表达式,从左到右依次求值 ,结果为最后一个表达式值。
特性
-
优先级最低。
-
常用于 for 循环多变量控制。
代码示例
int a = (1, 2, 3); // a=3
for (int i=0, j=10; i<j; i++, j--);
十、变量交换三种方法
概念
实现两个变量值互换。
特性
-
临时变量法:通用、安全、无溢出。
-
加减法 :
a=a+b; b=a-b; a=a-b;→ 可能溢出。 -
异或法 :
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 语句
概念
多分支选择语句,匹配整型常量执行对应分支。
特性
-
表达式必须为整型(int/char/enum)。
-
case 后为整型常量 ,值唯一不重复。
-
default 可选,匹配失败时执行。
-
case 内不可定义变量(作用域风险)。
-
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:任意条件、灵活、分支多时效率低。
十三、循环语句
概念
重复执行代码块,由循环变量、条件、增量组成。
特性
-
for :先判断 → 执行体 → 更新;适合已知次数。
-
while :先判断,后执行;可能 0 次。
-
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:先做后判 → 至少一次。
十四、跳转语句
概念
改变程序执行流程。
特性
-
break :跳出一层循环 /switch。
-
continue :跳过本次循环,进入下一次判断。
-
goto :无条件跳标签;慎用,易破坏结构。
代码示例
for (int i=0; i<5; i++)
{
if (i == 2) continue; // 跳过i=2
if (i == 4) break; // 结束循环
cout << i;
}
十五、语法细节
概念
大括号、分号使用规则。
特性
-
函数 / 普通代码块
{}不加分号。 -
结构体 / 类定义结束 必须加分号。
代码示例
// 函数:无分号
void fun() {}
// 结构体:必须分号
struct Stu { int id; };