Базовые операторы Julia

Следующие арифметические операторы поддерживаются для всех примитивных числовых типов:





Несколько простых примеров с использованием арифметических операторов:


julia> 1+10-5

6


julia> 2-6

–4


julia> 5*20/10

10.0


julia> 20\10

0.5


julia> 3^3 27


julia> 5.5%-2

1.5


Число, помещенное непосредственно перед идентификатором или круглыми скобками, например, 2x или 2(x+y), рассматривается как умножение.

Логические операторы

Для типов Bool поддерживаются следующие логические операторы:





Примеры использования логических операторов:


julia> !true

false


julia> !false

true


julia> true && true

true


julia> true && false

false


julia> false && false

false


julia> true || true

true


julia> true || false

true


julia> false || false

false

Побитовые операторы

Следующие побитовые операторы поддерживаются для всех примитивных целочисленных типов:





julia> ~100

–101


julia> 121 & 232

104


julia> 121 | 232

249


julia> 121 ⊻ 232 #Знак юникода

145


julia> xor(121, 232)

145


julia> ~UInt32(121)

0xffffff86


julia> ~UInt8(121)

0x86

Операторы обновления

Каждый арифметические и побитовый оператор имеет обновляющую версию, которую можно сформировать, поставив знак равенства (=) сразу после оператора. Этот оператор обновления присваивает результат операции обратно своему левому операнду.

Версии всех двоичных арифметических и побитовых операторов:





Пример использования операторов обновления:


julia> x = 25

25


julia> x += 25

50


julia> x

50


Оператор обновления переопределяет переменную в левой части. В результате тип переменной может измениться:


julia> x = 0x01

0x01


julia> typeof(x)

UInt8


julia> x *= 2

2


julia> typeof(x)

Int64

Векторизированные “точечные” операторы

Для каждого бинарного оператора существует соответствующий "точечный" оператор, который применяет оператор поэлементно над многоэлементными структурами (массивы и т.п.).

Примеры использования “точечного” оператора:


julia> [2, 4 ,6].^2

3-element Vector{Int64}:

4

16

36


julia> x=[1 2 3 4 5 ; 6 7 8 9 10]

2×5 Matrix{Int64}:

1 2 3 4 5

6 7 8 9 10


julia> x.+1

2×5 Matrix{Int64}:

2 3 4 5 6

7 8 9 10 11


julia> x

2×5 Matrix{Int64}:

1 2 3 4 5

6 7 8 9 10


julia> x .+=1

2×5 Matrix{Int64}:

2 3 4 5 6

7 8 9 10 11


julia> x

2×5 Matrix{Int64}:

2 3 4 5 6

7 8 9 10 11


Обратите внимание, "точечные" операторы обновления изменяют исходные значения, в отличии от остальных, создающих новые.

Операторы сравнения

Для всех примитивных числовых типов определены стандартные операции сравнения:





Пример использования операторов сравнения:


julia> 2 == 2.0

true


julia> 3 == 5

false


julia> 3 != 5

true


julia> 3 < 5

true


Целочисленные числа сравниваются стандартным образом – путем сравнения битов. Числа с плавающей точкой сравниваются в соответствии со стандартом IEEE 754:

Конечные числа упорядочиваются обычным образом.

Положительный ноль равен, но не больше отрицательного нуля.

Inf равно самому себе и больше, чем все остальные, кроме NaN.

–Inf равно самому себе и меньше всех остальных, кроме NaN.

NaN не равно, не меньше и не больше ничего, включая самого себя.


Использование "точечных" операторов сравнения для многоэлементных структур возвращает булев массив с результатами сравнения для каждого элемента:


julia> [1,2,3,4,5].<= 3

5-element BitVector:

1

1

1

0

0


Сравнения в Julia можно объединять в цепочки:


julia> 10 < 15 <= 20 < 30 == 30 > 20 >= 10 == 10 < 30 != 5

true


julia> x=[1 2 3 4 5 ; 6 7 8 9 10]

2×5 Matrix{Int64}:

1 2 3 4 5

6 7 8 9 10


julia> 1 .< x .< 7

2×5 BitMatrix:

0 1 1 1 1

1 0 0 0 0

Приоритет и ассоциативность операторов

Julia применяет следующий порядок и ассоциативность операций, от высшего к низшему:





Числовые коэффициенты, например, 2x, рассматриваются как умножение с более высоким старшинством, чем любая другая двоичная операция, за исключением ^, где они имеют старшинство только как экспонента:


julia> x = 3

3


julia> 2x^2

18


julia> 2^2x

64

Загрузка...