Основные операторы в Julia
Оператор — это символ, который указывает компилятору выполнить определённые математические или логические операции, такие как:3+2=5。
Язык Julia имеет богатый набор встроенных операторов. Поддерживаются следующие операции:
- Арифметические операторы
- Логические операторы
- Операторы отношения
- Побитовые операторы
- Операторы присваивания
- Векторизованные "точечные" операторы
Арифметические операторы
В следующей таблице показаны базовые арифметические операторы Julia, которые применимы ко всем базовым числовым типам:
| Выражение | Name | Описание |
|---|---|---|
+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) |
Примеры
6
julia> 1 - 2
-1
julia> 3*2/12
0.5
julia> 2+20-5
17
julia> 50*2/10
10.0
julia> 23%2
1
julia> 2^4
16
Логические операторы
В следующей таблице показаны логические операторы Julia:
| Выражение | Name |
|---|---|
!x |
Отрицание |
x && y |
Логическое И с сокращённым вычислением. В выражении x && y подвыражение y выполняется только если x истинно. |
x || y |
Логическое ИЛИ с сокращённым вычислением. В выражении x || y подвыражение y выполняется только если x ложно. |
Примеры
false
julia> !false
истина
julia> true && (x = (1, 2, 3))
(1, 2, 3)
julia> false && (x = (1, 2, 3))
false
julia> false || (x = (1, 2, 3))
(1, 2, 3)
Операторы отношения
В следующей таблице показаны операторы сравнения Julia:
| Operator | Name |
|---|---|
== |
Равенство |
!=, ≠ |
Неравенство |
< |
Меньше |
<=, ≤ |
Меньше или равно |
> |
Больше |
>=, ≥ |
Больше или равно |
Примеры
истина
julia> 100 == 101
false
julia> 100 != 101
истина
julia> 100 == 100.0
истина
julia> 100 < 500
истина
julia> 100 > 500
false
julia> 100 >= 100.0
истина
julia> -100 <= 100
истина
julia> -100 <= -100
истина
julia> -100 <= -500
false
julia> 100 < -10.0
false
Цепочные сравнения
Цепочные сравнения особенно удобны при написании численного кода. Они используют оператор && для сравнения скаляров, а для массивов используют & для поэлементного сравнения. Например, 0 .< A .< 1 даёт логический массив, все элементы которого равны true, если все элементы A находятся между 0 и 1.
Julia допускает цепочные сравнения:
Примеры
истина
Обратите внимание на порядок вычисления цепочных сравнений:
Примеры
M (обобщённая функция с 1 методом)
julia> M(1) < M(2) <= M(3)
2
1
3
истина
julia> M(1) > M(2) <= M(3)
2
1
false
Побитовые операторы
В следующей таблице показаны побитовые операторы Julia:
| Выражение | Name |
|---|---|
~x |
Побитовое НЕ |
x & y |
Побитовое И |
x | y |
Побитовое ИЛИ |
x ⊻ y |
Побитовое исключающее ИЛИ (логическое исключающее ИЛИ) |
x ⊼ y |
Побитовое И-НЕ |
x ⊽ y |
Побитовое ИЛИ-НЕ |
x >>> y |
Логический сдвиг вправо |
x >> y |
Арифметический сдвиг вправо |
x << y |
Логический/арифметический сдвиг влево |
Примеры
-124
julia> 123 & 234
106
julia> 123 | 234
251
julia> 123 ⊻ 234
145
julia> xor(123, 234)
145
julia> nand(123, 123)
-124
julia> 123 ⊼ 123
-124
julia> nor(123, 124)
-128
julia> 123 ⊽ 124
-128
julia> ~UInt32(123)
0xffffff84
julia> ~UInt8(123)
0x84
Операторы присваивания
Каждый бинарный оператор и побитовый оператор может выполнять составное присваивание левому операнду, помещая = непосредственно после бинарного оператора. Например,x += 3эквивалентно x = x + 3 。В следующей таблице показаны операторы присваивания Julia:
| Operator | Описание | Пример |
|---|---|---|
| = | Простой оператор присваивания: присваивает значение правого операнда левому операнду. | C = A + B присваивает значение A + B переменной C |
| += | Оператор сложения с присваиванием: присваивает левому операнду результат прибавления правого операнда к левому операнду. | C += A эквивалентно C = C + A |
| -= | Оператор вычитания с присваиванием: присваивает левому операнду результат вычитания правого операнда из левого операнда. | C -= A эквивалентно C = C - A |
| *= | Оператор умножения с присваиванием: присваивает левому операнду результат умножения правого операнда на левый операнд. | C *= A эквивалентно C = C * A |
| /= | Оператор деления с присваиванием: присваивает левому операнду результат деления левого операнда на правый операнд. | C /= A эквивалентно C = C / A |
| %= | Оператор взятия остатка с присваиванием: присваивает левому операнду остаток от деления двух операндов. | C %= A эквивалентно C = C % A |
| <<= | Оператор сдвига влево с присваиванием | C <<= 2 эквивалентно C = C << 2 |
| >>= | Оператор сдвига вправо с присваиванием | C >>= 2 эквивалентно C = C >> 2 |
| &= | Оператор побитового И с присваиванием | C &= 2 эквивалентно C = C & 2 |
| ^= | Побитовый оператор исключающего ИЛИ с присваиванием | C ^= 2 эквивалентно C = C ^ 2 |
| |= | Побитовый оператор ИЛИ с присваиванием | C |= 2 эквивалентно C = C | 2 |
| >>>= | Оператор логического сдвига вправо с присваиванием | C >>>= 2 эквивалентно C = C >>>2 |
| ⊻= | Оператор присваивания XOR (логическое исключающее ИЛИ) | C ⊻= 2 эквивалентно C = C ⊻= 2 |
Примеры
1
julia> x += 3
4
julia> x
4
Векторизованные "точечные" операторы
В Julia у каждого бинарного оператора есть соответствующий «точечный» оператор; например,^существует соответствующий.^. Этот соответствующий.^автоматически определяется Julia для выполнения поэлементной^операции. Например,[1,2,3] ^ 3недопустимо, потому что математика не определила куб массива (с разной длиной строк и столбцов). Но[1,2,3] .^ 3допустимо в Julia, и оно выполняет операцию ^ поэлементно (также называемую векторизованной операцией), давая [1^3, 2^3, 3^3]. Аналогично,!или√унарные операторы, подобные этому, также имеют соответствующий.√ , используемый для выполнения поэлементных операций.
Примеры
3-элементный Vector{Int64}:
1
8
27
Помимо точечных операторов, у нас также есть поэлементные операторы присваивания, например,a .+= b(или@. a += b) разбирается какa .= a .+ b。
Приоритет операторов и ассоциативность
Приоритет операторов определяет группировку членов в выражении. Это влияет на то, как вычисляется выражение. Некоторые операторы имеют более высокий приоритет, чем другие; например, операторы умножения и деления имеют более высокий приоритет, чем операторы сложения и вычитания.
Напримерx = 7 + 3 * 2, здесь x присваивается 13 вместо 20, потому что оператор*имеет+более высокий приоритет, поэтому умножение 3*2 вычисляется первым, а затем прибавляется к 7.
В следующей таблице операторы перечислены по приоритету от наивысшего к наинизшему. Операторы с более высоким приоритетом расположены в верхней части таблицы, а операторы с более низким приоритетом — в нижней. В выражении операторы с более высоким приоритетом вычисляются первыми.
| Категория | Operator | Ассоциативность |
|---|---|---|
| Синтаксис | . за которым следует :: |
Левоассоциативные |
| Возведение в степень | ^ |
Правоассоциативные |
| Унарные операторы | + - √ |
Правоассоциативные |
| Операции сдвига | << >> >>> |
Левоассоциативные |
| Деление | // |
Левоассоциативные |
| Умножение | * / % & \ ÷ |
Левоассоциативные |
| Сложение | + - | ⊻ |
Левоассоциативные |
| Синтаксис | : .. |
Левоассоциативные |
| Синтаксис | |> |
Левоассоциативные |
| Синтаксис | <| |
Правоассоциативные |
| Сравнение | > < >= <= == === != !== <: |
Неассоциативные |
| Управление потоком | && за которым следует || за которым следует ? |
Правоассоциативные |
| Операции с парами | => |
Правоассоциативные |
| Присваивание | = += -= *= /= //= \= ^= ÷= %= |= &= ⊻= <<= >>= >>>= |
Правоассоциативные |
Мы также можем использовать встроенную функциюBase.operator_precedenceчтобы просмотреть значение приоритета любого заданного оператора; чем больше значение, тем выше приоритет.
Примеры
(11, 12, 17)
julia> Base.operator_precedence(:sin), Base.operator_precedence(:+=), Base.operator_precedence(:(=)) # (Примечание: вокруг знака равенства `:(=)` должны быть круглые скобки)
(0, 1, 1)
Кроме того, встроенные функцииBase.operator_associativityмогут возвращать символьное представление ассоциативности операторов:
Примеры
(:left, :none, :right)
julia> Base.operator_associativity(:⊗), Base.operator_associativity(:sin), Base.operator_associativity(:→)
(:left, :none, :right)