运算符优先级 #
一、优先级概述 #
运算符优先级决定了表达式中运算的顺序。优先级高的运算符先执行,优先级低的运算符后执行。
1.1 基本示例 #
swift
let result = 2 + 3 * 4
print(result)
let result2 = (2 + 3) * 4
print(result2)
1.2 结合性 #
结合性决定了相同优先级的运算符的计算顺序:
- 左结合:从左到右计算
- 右结合:从右到左计算
swift
let a = 4 - 2 - 1
print(a)
let b = 8 / 4 / 2
print(b)
二、运算符优先级表 #
2.1 完整优先级表(从高到低) #
| 优先级 | 运算符 | 描述 | 结合性 |
|---|---|---|---|
| 最高 | << >> | 位移 | 无 |
| * / % | 乘、除、取余 | 左 | |
| + - | 加、减 | 左 | |
| …< … | 区间 | 无 | |
| as is as? as! | 类型转换 | 无 | |
| < <= > >= | 比较 | 无 | |
| == != === !== | 相等 | 无 | |
| && | 逻辑与 | 左 | |
| || | 逻辑或 | 左 | |
| ?: | 三元条件 | 右 | |
| = *= /= %= += -= | 赋值 | 右 | |
| 最低 | >> <<= >>= &= |= ^= | 复合赋值 | 右 |
2.2 一元运算符优先级 #
一元运算符(如 !、-、+)优先级高于二元运算符:
swift
let a = -5 + 3
print(a)
let b = !true && false
print(b)
三、算术运算符优先级 #
3.1 乘除优先于加减 #
swift
let result1 = 2 + 3 * 4
let result2 = 2 * 3 + 4
let result3 = 10 - 6 / 2
print(result1)
print(result2)
print(result3)
3.2 使用括号改变顺序 #
swift
let result1 = (2 + 3) * 4
let result2 = 2 * (3 + 4)
let result3 = (10 - 6) / 2
print(result1)
print(result2)
print(result3)
3.3 复杂表达式 #
swift
let result = 2 + 3 * 4 - 6 / 2
print(result)
let result2 = ((2 + 3) * 4 - 6) / 2
print(result2)
四、比较运算符优先级 #
4.1 比较运算符优先级相同 #
swift
let a = 5
let b = 3
let c = 7
let result = a > b && b < c
print(result)
4.2 与算术运算符结合 #
swift
let result = 2 + 3 > 4
print(result)
let result2 = 5 * 2 < 8 + 3
print(result2)
五、逻辑运算符优先级 #
5.1 逻辑非最高 #
swift
let a = true
let b = false
let result = !a && b
print(result)
let result2 = !(a && b)
print(result2)
5.2 逻辑与优先于逻辑或 #
swift
let a = true
let b = false
let c = true
let result = a || b && c
print(result)
let result2 = (a || b) && c
print(result2)
5.3 复杂逻辑表达式 #
swift
let x = true
let y = false
let z = true
let result = !x || y && z
print(result)
let result2 = (!x || y) && z
print(result2)
六、赋值运算符优先级 #
6.1 赋值运算符优先级最低 #
swift
var a = 5
let b = 10
let result = a + b
print(result)
6.2 复合赋值 #
swift
var a = 10
a += 2 * 3
print(a)
a = 10
a *= 2 + 3
print(a)
七、三元运算符 #
7.1 三元运算符优先级 #
swift
let a = 5
let b = 10
let result = a > b ? a : b
print(result)
let result2 = a > 3 ? a + 1 : b - 1
print(result2)
7.2 嵌套三元运算符 #
swift
let score = 85
let grade = score >= 90 ? "A" : score >= 80 ? "B" : score >= 70 ? "C" : "D"
print(grade)
7.3 与其他运算符结合 #
swift
let a = 5
let b = 10
let result = (a > b ? a : b) * 2
print(result)
八、区间运算符 #
8.1 区间运算符优先级 #
swift
let range = 1...5
let array = Array(range)
print(array)
8.2 与其他运算符结合 #
swift
let start = 1
let end = 5
for i in start...end {
print(i)
}
let sum = (1...5).reduce(0, +)
print(sum)
九、实际应用 #
9.1 复杂表达式 #
swift
let a = 5
let b = 3
let c = 2
let result = a + b * c > 10 && a - b < c || a * c == 10
print(result)
9.2 使用括号提高可读性 #
swift
let a = 5
let b = 3
let c = 2
let result = ((a + (b * c)) > 10) && ((a - b) < c) || ((a * c) == 10)
print(result)
9.3 条件判断 #
swift
let age = 25
let income = 50000
let creditScore = 720
let eligible = age >= 18 && income > 30000 && creditScore >= 700
print(eligible)
let premium = age >= 25 && (income > 75000 || creditScore >= 750)
print(premium)
十、最佳实践 #
10.1 使用括号明确意图 #
swift
let result = a + b * c
let result2 = a + (b * c)
let condition = a > b && b > c
let condition2 = (a > b) && (b > c)
10.2 拆分复杂表达式 #
swift
let a = 5
let b = 3
let c = 2
let isAValid = a > b
let isBValid = b > c
let result = isAValid && isBValid
10.3 避免过度嵌套 #
swift
let score = 85
let grade: String
if score >= 90 {
grade = "A"
} else if score >= 80 {
grade = "B"
} else if score >= 70 {
grade = "C"
} else {
grade = "D"
}
print(grade)
十一、常见错误 #
11.1 忘记运算符优先级 #
swift
let result = 2 + 3 * 4
print(result)
let expected = (2 + 3) * 4
print(expected)
11.2 逻辑运算符混淆 #
swift
let a = true
let b = false
let c = true
let result1 = a || b && c
let result2 = (a || b) && c
print(result1)
print(result2)
11.3 赋值与比较混淆 #
swift
var a = 5
if a == 10 {
print("a等于10")
}
十二、总结 #
本章学习了Swift运算符优先级:
- 优先级:决定运算顺序
- 结合性:决定相同优先级的计算方向
- 括号:改变默认优先级
最佳实践:
- 使用括号明确意图
- 拆分复杂表达式
- 避免过度嵌套
- 保持代码可读性
下一章,我们将学习控制流!
最后更新:2026-03-26