Читать «Julia. Язык программирования. Быстрый старт» — Вадим Никитин онлайн
Страница 5 из 5
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
Базовые функции
Julia поддерживает три формы числового преобразования, которые отличаются друг от друга обработкой неточных преобразований:
Записи вида T(x) или convert(T,x) преобразуют x в значение типа T. Результат зависит от следующих двух случаев:
● Если T – тип с плавающей точкой, то результатом будет ближайшее представимое значение, которое может быть положительной или отрицательной бесконечностью.
● Если T является целочисленным типом, и x не может быть представлен в типе T (наличие значащих цифр после запятой или переполнение типа Т), то возникает ошибка InexactError.
Запись вида x%T преобразует целое число x в значение целочисленного типа T, соответствующее x по модулю 2^n. Здесь n представляет количество битов в T. Другими словами, двоичное представление усекается, чтобы оно соответствовало размеру. Применимо только для целых чисел и целочисленных типов, переполнение типа обрабатывается стандартно.
Конец ознакомительного фрагмента.
Текст предоставлен ООО «Литрес».
Прочитайте эту книгу целиком, купив полную легальную версию на Литрес.
Безопасно оплатить книгу можно банковской картой Visa, MasterCard, Maestro, со счета мобильного телефона, с платежного терминала, в салоне МТС или Связной, через PayPal, WebMoney, Яндекс.Деньги, QIWI Кошелек, бонусными картами или другим удобным Вам способом.