Julia中的整数类型
2018-08-24 本文已影响114人
Julia语言
欢迎关注Julia语言微信公众账号 julia_language
原文链接:http://suo.im/5mqmNW
Julia中的基本数值类型(整型)

使用标准方式来表示文本化的整数:
julia> 1
1
julia> 1234
1234
整数文本的默认类型,取决于目标系统是 32 位架构还是 64 位架构:
# 32-bit system:
julia> typeof(1)
Int32
# 64-bit system:
julia> typeof(1)
Int64
Julia 内部变量 `WORD_SIZE` 用以指示目标系统是 32 位还是 64 位.
# 32-bit system:
julia> Sys.WORD_SIZE
32
# 64-bit system:
julia> Sys.WORD_SIZE
64
另外,Julia 定义了 Int 和 Uint 类型,它们分别是系统原生的有符号和无符号整数类型的别名:
# 32-bit system:
julia> Int
Int32
julia> Uint
Uint32
# 64-bit system:
julia> Int
Int64
julia> Uint
Uint64
对于不能用 32 位而只能用 64 位来表示的大整数文本,不管系统类型是什么,始终被认为是 64 位整数:
# 32-bit or 64-bit system:
julia> typeof(3000000000)
Int64
无符号整数的输入和输出使用前缀 0x 和十六进制数字 0-9a-f (也可以使用 A-F )。无符号数的位数大
小,由十六进制数的位数决定:
julia> 0x1
0x01
julia> typeof(ans)
UInt8
julia> 0x123
0x0123
julia> typeof(ans)
UInt16
julia> 0x1234567
0x01234567
julia> typeof(ans)
UInt32
julia> 0x123456789abcdef
0x0123456789abcdef
julia> typeof(ans)
UInt64
julia> 0x11112222333344445555666677778888
0x11112222333344445555666677778888
julia> typeof(ans)
UInt128
二进制和八进制文本:
julia> 0b10
0x02
julia> typeof(ans)
UInt8
julia> 0o010
0x08
julia> typeof(ans)
UInt8
julia> 0x00000000000000001111222233334444
0x00000000000000001111222233334444
julia> typeof(ans)
UInt128
二进制,八进制和十六进制可在前面加上一个负号 - 。 产生其补码:
julia> -0x5
0xfb
julia> -0x0002
0xfffe
基础数值类型的最小值和最大值,可由 typemin 和 typemax 函数查询:
julia> (typemin(Int32), typemax(Int32))
(-2147483648, 2147483647)
julia> for T in [Int8,Int16,Int32,Int64,Int128,UInt8,UInt16,UInt32,UInt64,UInt128]
println("$(lpad(T,7)): [$(typemin(T)),$(typemax(T))]")
end
Int8: [-128,127]
Int16: [-32768,32767]
Int32: [-2147483648,2147483647]
Int64: [-9223372036854775808,9223372036854775807]
Int128: [-170141183460469231731687303715884105728,170141183460469231731687303715884105727]
UInt8: [0,255]
UInt16: [0,65535]
UInt32: [0,4294967295]
UInt64: [0,18446744073709551615]
UInt128: [0,340282366920938463463374607431768211455]
typemin 和 typemax 的返回值,与所给的参数类型是同一类的。(上述例子用到了一些将要介绍到的特
性,包括 for 循环 ,字符串 ,及内插 。)
溢出
在 Julia 中,如果计算结果超出数据类型所能代表的最大值,将会发生溢出:
julia> x = typemax(Int64)
9223372036854775807
julia> x + 1
-9223372036854775808
julia> x + 1 == typemin(Int64)
true
可见, Julia 中的算数运算其实是一种同余算术 。它反映了现代计算机底层整数算术运算特性。如果有可能发生溢出,一定要显式的检查是否溢出;或者使用 BigInt 类型(详见任意精度的算术 )。
为了减小溢出所带来的影响,整数加减法、乘法、指数运算都会把原先范围较小的整数类型提升到 Int 或 Uint
类型。(除法、求余、位运算则不提升类型)。
除法错误
整数除法( div 功能)有两个额外的样例:被 0 除,和被最低的负数( typemin )-1 除。两个例子都抛出了一个 DivideError 。余数和模运算( rem 和 mod )当它们的第二个参数为 0 时,抛出了一个 DivideError 。
