Julia 基本运算符全解析(中文版)
“运算符即函数” —— Julia 的运算符统一、高效、可重载
一、Julia 运算符总览
| 类别 | 运算符 | 优先级(高→低) |
|---|---|---|
| 幂运算 | ^ | 1 |
| 一元运算 | + - ! ~ | 2 |
| 乘除 | * / ÷ % & | 3 |
| 加减 | + - | 4 |
| 位移 | << >> >>> | 5 |
| 关系 | < > <= >= == != === !== | 6 |
| 逻辑 | && || | 7 |
| 赋值 | = += -= *= /= //= \= ^= %= |= &= $= <<= >>= >>>= | 8 |
优先级相同 → 从左到右
二、算术运算符(Arithmetic)
| 运算符 | 含义 | 示例 | 结果 |
|---|---|---|---|
+ | 加法 | 3 + 4 | 7 |
- | 减法 | 10 - 3 | 7 |
* | 乘法 | 2 * 5 | 10 |
/ | 除法(浮点) | 10 / 3 | 3.333... |
÷ 或 \div+Tab | 整除 | 10 ÷ 3 | 3 |
% | 取模 | 10 % 3 | 1 |
^ | 幂 | 2 ^ 10 | 1024 |
10 ÷ 3 # 3
10 % 3 # 1
2 ^ 3 # 8
注意:
/总是返回Float64,即使整数相除
三、比较运算符(Comparison)
| 运算符 | 含义 | 示例 | 结果 |
|---|---|---|---|
== | 相等 | 5 == 5.0 | true |
!= | 不等 | 3 != 4 | true |
< | 小于 | 3 < 5 | true |
> | 大于 | 5 > 3 | true |
<= | 小于等于 | 5 <= 5 | true |
>= | 大于等于 | 5 >= 3 | true |
=== | 相同(值+类型) | 5 === 5.0 | false |
!== | 不相同 | 5 !== 5.0 | true |
5 == 5.0 # true(值相等)
5 === 5.0 # false(类型不同)
四、逻辑运算符(Logical)
| 运算符 | 含义 | 短路 | 示例 |
|---|---|---|---|
&& | 逻辑与 | 是 | true && false → false |
|| | 逻辑或 | 是 | true || false → true |
! | 逻辑非 | – | !true → false |
x = 10
x > 0 && x < 100 # true
x < 0 || x > 5 # true
短路求值:
&&左边 false 就不算右边,||左边 true 就不算右边
五、位运算符(Bitwise)
| 运算符 | 含义 | 示例 |
|---|---|---|
& | 按位与 | 5 & 3 → 1 |
| | 按位或 | 5 | 3 → 7 |
⊻ 或 xor | 按位异或 | 5 ⊻ 3 → 6 |
~ | 按位取反 | ~5 → -6 |
<< | 左移 | 1 << 3 → 8 |
>> | 右移(带符号) | 8 >> 2 → 2 |
>>> | 右移(无符号) | -8 >>> 2 → 4611686018427387896 |
5 & 3 # 101 & 011 = 001 → 1
5 | 3 # 101 | 011 = 111 → 7
5 ⊻ 3 # 101 ⊻ 011 = 110 → 6
六、链式比较(Chained Comparison)—— 超实用!
x = 5
1 < x <= 10 # true
0 <= x < 100 # true
等价于:
1 < x && x <= 10
七、赋值运算符
| 运算符 | 含义 | 示例 |
|---|---|---|
= | 赋值 | x = 10 |
+= | 加赋值 | x += 5 |
-= | 减赋值 | x -= 3 |
*= | 乘赋值 | x *= 2 |
/= | 除赋值 | x /= 2 |
//= | 有理数除 | x //= 3//2 |
^= | 幂赋值 | x ^= 2 |
x = 10
x += 5 # x = 15
x *= 2 # x = 30
八、点运算(Broadcasting)—— 向量化神器
| 运算符 | 含义 | 示例 |
|---|---|---|
.+ | 逐元素加 | [1,2] .+ [10,20] → [11,22] |
.* | 逐元素乘 | |
.^ | 逐元素幂 | |
.f() | 逐元素函数 | sin.([0, π/2, π]) |
x = [1, 2, 3]
x .^ 2 # [1, 4, 9]
sin.(x) # [sin(1), sin(2), sin(3)]
@.宏:自动为所有运算加.
@. x^2 + 2x + 1 # 等价于 x.^2 . .+ 2.*x .+ 1
九、管道运算符 |> —— 函数链式调用
# 传统写法
round(sqrt(abs(-5.5)))
# 管道写法(更清晰)
-5.5 |> abs |> sqrt |> round
读作:“把 -5.5 传给 abs,再传给 sqrt,再传给 round”
十、特殊运算符
| 运算符 | 含义 | 示例 |
|---|---|---|
$ | 字符串插值 | "x = $x" |
in | 成员判断 | 3 in [1,2,3] |
isa | 类型判断 | x isa Int |
... | 展开 | f(1, 2, 3... ) |
: | 范围 | 1:10 |
3 in 1:5 # true
x isa Number # true
f(args...) # 接收任意参数
十一、运算符优先级表(从高到低)
# 1. 幂
2^3^2 # = 2^(3^2) = 512
# 2. 一元
-x^2 # = -(x^2)
# 3. 乘除
2 + 3 * 4 # = 2 + 12 = 14
# 4. 加减
10 / 2 + 3 # = 5.0 + 3 = 8.0
# 5. 比较链
1 < x <= 10
# 6. 逻辑
true || false && true # = true || (false && true) = true
十二、运算符速查表
| 类别 | 运算符 |
|---|---|
| 算术 | + - * / ÷ % ^ |
| 比较 | == != < > <= >= === !== |
| 逻辑 | && || ! |
| 位运算 | & | ⊻ ~ << >> >>> |
| 赋值 | = += -= *= /= //= ^= |
| 广播 | .+ .* .^ .f() |
| 管道 | |> |
| 其他 | $ in isa ... : |
十三、小练习(立即上手)
- 计算
(2 + 3) * 4^2 - 判断
x是否在[10, 20, 30]中 - 用管道计算
sin(cos(0)) - 用广播计算
[1,2,3]的平方和立方 - 写函数
is_even(x)用位运算
答案示例
# 1. 算术
(2 + 3) * 4^2 # 80
# 2. 成员判断
x = 20
x in [10, 20, 30] # true
# 3. 管道
0 |> cos |> sin
# 4. 广播
x = [1, 2, 3]
x .^ 2 # [1, 4, 9]
x .^ 3 # [1, 8, 27]
# 5. 位运算
is_even(x) = (x & 1) == 0
is_even(4) # true
十四、性能建议
| 建议 | 说明 |
|---|---|
用 ÷ 代替 floor(Int, x/y) | 更快 |
避免 == 浮点数 | 用 ≈(isapprox) |
逻辑短路 && || | 避免不必要计算 |
广播 . | 向量化,避免循环 |
3.0 ≈ 3.0000000001 # true(容差)
恭喜!你已精通 Julia 所有基本运算符!
现在你可以:
- 写出清晰优雅的数学表达式
- 用管道组织复杂计算
- 用广播实现向量化
- 用位运算优化性能
下一站推荐
| 主题 | 为什么学 |
|---|---|
控制流 if for while | 逻辑结构 |
| 函数与多重派发 | 核心特性 |
| 数组操作 | 数据处理 |
宏 @ | 元编程 |
需要我:
- 生成 运算符优先级思维导图?
- 写一个 计算器 REPL(支持所有运算符)?
- 演示 自定义运算符(如
±)?
随时告诉我!