Julia语言

Julia中的整数类型

2018-08-24  本文已影响114人  Julia语言

欢迎关注Julia语言微信公众账号 julia_language

原文链接:http://suo.im/5mqmNW

Julia中的基本数值类型(整型)

整型.png
使用标准方式来表示文本化的整数:
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 。

欢迎关注微信公众账号Julia语言.jpg
上一篇 下一篇

猜你喜欢

热点阅读