Типы целых чисел в Julia:
Целые числа вводятся и выводятся стандартным образом:
julia> 10
10
julia> 0123456789
123456789
Тип по умолчанию для целых чисел зависит от разрядности системы (64-бита):
julia> typeof(10)
Int64
julia> typeof(0123456789)
Int64
Julia также определяет типы Int и UInt, которые являются псевдонимами для системных знаковых и беззнаковых типов целых чисел соответственно:
julia> Int
Int64
julia> UInt
UInt64
Большие целые числа, которые не могут быть представлены с использованием 64 бит, но могут быть представлены в 128 битах, всегда создают 128-битные целые числа, независимо от типа системы:
julia> typeof(10000000000000000000)
Int128
Беззнаковые целые числа вводятся и выводятся с использованием префикса 0x и цифр от 0 до 9, а также латинских букв от a до f, используемых для обозначения шестнадцатеричных чисел, использование заглавных букв A-F также допустимо. Размер беззнакового значения определяется количеством используемых шестнадцатеричных цифр:
julia> x = 0x1
0x01
julia> typeof(x)
UInt8
julia> x = 0x123
0x0123
julia> typeof(x)
UInt16
julia> x = 0x1234567
0x01234567
julia> typeof(x)
UInt32
julia> x = 0x123456789abcdef
0x0123456789abcdef
julia> typeof(x)
UInt64
julia> x = 0x11112222333344445555666677778888
0x11112222333344445555666677778888
julia> typeof(x)
UInt128
Значения, слишком большие для типов Int128, UInt128, при вводе получат специальный тип BigInt:
julia> typeof(100000000000000000000000000000000000000)
Int128
julia> typeof(1000000000000000000000000000000000000000)
BigInt
julia> typeof(0xffffffffffffffffffffffffffffffff)
UInt128
julia> typeof(0xfffffffffffffffffffffffffffffffff)
BigInt
Это не беззнаковый тип, но это единственный встроенный тип, достаточно большой для представления таких больших целых значений.
В Julia превышение максимального представляемого значения данного типа приводит к циклическому поведению. Пример (функции typemax(), typemin(), возвращают максимальное и минимальное значения для заданного типа, == оператор равенства):
julia> x = typemax(Int64)
9223372036854775807
julia> x+1
–9223372036854775808
julia> x + 1 == typemin(Int64)
true
julia> x = typemax(UInt64)
0xffffffffffffffff
julia> x+1
0x0000000000000000
julia> x + 1 == typemin(UInt64)
true
В тех случаях, когда переполнение возможно, рекомендуется производить проверку на цикличное поведение. В противном случае используйте тип BigInt арифметики произвольной точности. Ниже приведен пример поведения при переполнении и как его можно решить с помощью BigInt():
julia> 10^19
–8446744073709551616
julia> BigInt(10)^19
10000000000000000000