Julia - 基本运算符

在本章中,我们将讨论 Julia 中不同类型的运算符。

算术运算符

在 Julia 中,我们获得了所有数字基元类型的所有基本算术运算符。 它还为我们提供了按位运算符以及标准数学函数综合集合的高效实现。

下表显示了 Julia 的原始数字类型支持的基本算术运算符 −

表达式 名称 描述
+x 一元加 这是恒等运算。
-x 一元减 它将值映射到它们的加法逆元。
x + y 二进制加 执行加法。
x - y 二进制减 它执行减法。
x * y 乘法 它执行乘法。
x / y 除法 它执行除法。
x ÷ y 整数除法 表示为 x / y 并截断为整数。
x \ y 反除 相当于 y / x。
x ^ y 乘方 它计算 x 的 y 次方。
x % y 余数 相当于rem(x,y)。
!x 否定 它是 bool 类型的否定,并将 true 更改为 false,反之亦然。

Julia 的提升系统使这些算术运算在参数类型的混合上自然而自动地工作。

示例

下面的例子展示了算术运算符的使用 −

julia> 2+20-5
17

julia> 3-8
-5

julia> 50*2/10
10.0

julia> 23%2
1

julia> 2^4
16

按位运算符

下表显示了 Julia 的原始数字类型支持的按位运算符 −

Sl.No 表达式名称 名称
1 ∼x 按位取反
2 x & y 按位与
3 x | y 按位或
4 x ⊻ y 按位异或(异或)
5 x >>> y 逻辑右移
6 x >> y 算术右移
7 x << y 逻辑/算术左移

示例

以下示例展示了按位运算符的使用 −

julia> ∼1009
-1010

julia> 12&23
4

julia> 12 & 23
4

julia> 12 | 23
31

julia> 12 ⊻ 23
27

julia> xor(12, 23)
27

julia> ∼UInt32(12)
0xfffffff3

julia> ∼UInt8(12)
0xf3

更新运算符

每个算术和按位运算符都有一个更新版本,可以通过在运算符后面放置等号 (=) 来形成。 该更新运算符将运算结果分配回其左操作数。 这意味着 a +=1 等于 a = a+1。

以下是所有二进制算术和位运算符的更新版本列表 −

  • +=

  • -=

  • *=

  • /=

  • \=

  • ÷=

  • %=

  • ^=

  • &=

  • |=

  • ⊻=

  • >>>=

  • >>=

  • <<=

示例

以下示例显示了更新运算符的使用 −

julia> A = 100
100

julia> A +=100
200

julia> A
200

矢量化"点"运算符

对于像 ^ 这样的每一个二元运算,都有一个对应的"点"(.) 运算,它在整个数组上一一使用。 例如,如果您尝试执行 [1, 2, 3] ^ 2,则它未定义,并且无法对数组进行平方。 另一方面,[1, 2, 3] .^ 2 被定义为计算向量化结果。 同样的意义,这个向量化的"点"运算符也可以与其他二元运算符一起使用。

示例

以下示例显示了"点"运算符的使用 −

julia> [1, 2, 3].^2
3-element Array{Int64,1}:
 1
 4
 9

数字比较运算符

下表显示了 Julia 的原始数字类型支持的数字比较运算符 −

Sl.No 运算符 名称
1 == 相等
2 !=,≠ 不相等
3 < 小于
4 <=, ≤ 小于或等于
5 > 大于
6 >=, ≥ 大于或等于

示例

以下示例显示了数字比较运算符的使用 −

julia> 100 == 100
true

julia> 100 == 101
false

julia> 100 != 101
true

julia> 100 == 100.0
true

julia> 100 < 500
true

julia> 100 > 500
false

julia> 100 >= 100.0
true

julia> -100 <= 100
true

julia> -100 <= -100
true

julia> -100 <= -500
false

julia> 100 < -10.0
false

链接比较

在 Julia 中,比较可以任意链接。 对于数字代码,链接比较非常方便。 用于标量比较的 && 运算符和用于元素比较的 & 运算符允许链式比较在数组上正常工作。

示例

以下示例展示了链式比较的使用 −

julia> 100 < 200 <= 200 < 300 == 300 > 200 >= 100 == 100 < 300 != 500
true

在下面的示例中,让我们检查一下链式比较的评估行为 −

julia> M(a) = (println(a); a)
M (generic function with 1 method)
julia> M(1) < M(2) <= M(3)
 2
 1
 3
true
julia> M(1) > M(2) <= M(3)
 2
 1
false

运算符优先级和关联性

从最高优先级到最低优先级,下表显示了 Julia 应用的运算的顺序和关联性 −

类别 运算符 关联性
语法 后跟::
求幂 ^
一元 + - √
位移 << >> >>>
分数 //
乘法 * / % & \ ÷
加法 + - | ⊻
语法 : ..
语法 |>
语法 <|
比较 > < >= <= == === != !== <: 非关联
控制流程 && followed by || followed by ?
配对 =>
分配 = += -= *= /= //= \= ^= ÷= %= |= &= ⊻= <<= >>= >>>=

我们还可以使用Base.operator_precedence函数来检查给定运算符的数字优先级。 下面给出示例 −

julia> Base.operator_precedence(:-), Base.operator_precedence(:+), Base.operator_precedence(:.)
(11, 11, 17)