弱小与无知不是生存的障碍,傲慢才是。 -- 刘慈欣 《三体》
Neither weakness nor ignorance hinders our survival, but arrogance does.
1. 原始数据类型(Numeric Primitiv)
1.1 整数(Integer)
整型字面量的标准形式:
julia>123
123
整型在Julia中的类型名为Int,也就是英文整型Integer的缩写。
# 32位操作系统
julia>typeof(ans)
Int32
# 64位操作系统
julia>typeof(ans)
Int64
Julia提供了内置变量Sys.WORD_SIZE用于查看系统字长:
# 32位操作系统
julia>Sys.WORD_SIZE
32
# 64位操作系统
julia>Sys.WORD_SIZE
64
Julia提供了5种精度的有符号整型,分别是:Int8,Int16,Int32,Int64,Int128,以及相应字节数的5种无符号整型
1.1.1 有符号整型
1.1.1.1 Int8
在Julia中,计算机会为int8类型的整型分配8个连续的存储单元,也就是8个比特(Bit),一个字节(Byte),来存放数据。
sizeof(type)用于查看字节:
julia>sizeof(Int8)
1
8个存储单元的首位,也就是最高位为符号位,0表正数,1表负数
十进制数5的内置表示:
剩余每个单元格都有2种存储可能:0或1,共7个,也就有种可能。
我们把0考虑在正数范围内,则Int8类型可表示的最大整数为:,用typemax(type)查看类型最大值:
julia>2^7-1
127
julia>typemax(Int8)
127
最小为:,用typemin(type)函数查看类型最小值:
julia>-2^7
-128
julia>typemin(Int8)
-128
1.1.1.2 其他整型
名称 | 位/比特(Bit) | 最小值 | 最大值 |
---|---|---|---|
Int8 | 8 | ||
Int16 | 16 | ||
Int32 | 32 | ||
Int64 | 64 | ||
Int128 | 128 |
1.1.2 无符号整形
无符号整型与有符号整型的区别是,前者没有符号位。
名称 | 比特 | 最小值 | 最大值 |
---|---|---|---|
UInt8 | 8 | 0 | |
UInt16 | 16 | 0 | |
UInt32 | 32 | 0 | |
UInt64 | 64 | 0 | |
UInt128 | 128 | 0 |
1.1.3 进制
名称 | 意义 | 每位上可能的表示 |
---|---|---|
0b | 二进制 | 0 1 |
0o | 八进制 | 0 1 2 3 4 5 6 7 |
0x | 十六进制 | 0 1 2 3 4 5 6 7 8 9 a b c d e |
其中十六进制中的a,b,c,d,e的十进制表示分别为10,11,12,13,14,15
无符号整型可通过以上三种进制来输入,但输出都为十六进制:
julia>0b101
0x05
julia>typeof(ans)
UInt8
julia>0o1374
0x02fc
julia>typeof(ans)
UInt16
julia>0xA1b2c3d4 # 16进制的输入也可用大写ABCDE
0x0a1b1c3d4
julia>typeof(ans)
UInt32
分配的比特数随输入而定,即:一旦输入超过一种比特数的最大表示范围后,将被分配到更多比特。
julia>(0x12,0x123)
(0x12,0x0123)
julia>typeof(ans)
Tuple{Uint8,Uint16}
其中Tuple为元组类型,后续将会介绍。
1.1.4 溢出行为
溢出行为指数字超出类型表示范围。上溢指超出最大表示范围,下溢表示超出最小表示范围。
在julia中,无论是上溢还是下溢,都会导致循环行为:
julia>typemin(Int64)
-9223372036854775808
julia>ans - 1 # 下溢
9223372036854775807
julia>2 ^ 63 # 上溢
-9223372036854775808
julia>typemax(Int64)
9223372036854775807
julia>ans + 2 # 上溢
-9223372036854775807
1.2 浮点数(Float)
名称 | 精度 | 比特 |
---|---|---|
Float16 | 半精度(half) | 16 |
Float32 | 单精度(single) | 32 |
Float64 | 双精度(double) | 64 |
浮点数字面量标准表示:
julia>1.2
1.2
julia>.2
0.2
科学计数法:
julia>2e10 # 2*10^10
2.0e10
julia>5E-8 # 5*10^(-8)
5.0e-8
特殊浮点数:
名称 | 描述 |
---|---|
Inf | 正无穷大,大于任何浮点数 |
-Inf | 负无穷大,小于任何浮点数 |
NaN | 非数(Not a Number) |
julia>1 / 0
Inf
julia>-1 / 0
-Inf
julia>typeof(ans)
Float64
julia>0 / 0
NaN
julia>typeof(ans)
Float64
1.3 类型转换
1.3.1 Int转换
julia>123
123
julia>typeof(ans)
Int64
julia>Int32(123)
123
julia>typeof(ans)
int32
1.3.2 Float转换
julia>1.23 # 默认Float64,可在数后加f0更改为Float32
1.23
julia>typeof(ans)
Float64
julia>Float16(1.23)
Float16(1.23)
julia>typeof(ans)
Float16
julia>Float32(1.23)
1.23f0
julia>typeof(ans)
Float32
1.3.3 Int to Float
julia>2
2
julia>typeof(ans)
Int64
julia>Float32(2) # 不指定比特则默认为64
2.0f0
julia>typeof(ans)
Float32
julia>2 / 1.
2.0
julia>2 * 1. # 含浮点数的乘除法默认生成浮点数
julia>typeof(ans)
Float64
1.3.4 Float to Int
julia>2.0
2.0
julia>Int(ans) # 不指定比特则默认为64
2
julia>typeof(ans)
Int64
1.4 任意精度BigInt、BigFloat
julia还为任意精度算数提供了软件支持,其类型名为BigInt,当然这会相应地牺牲一些性能。
# 计算一个巨大数的平方
julia>99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
julia>ans^2
9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
julia>typeof(ans)
BigInt
如果想了解更多关于Julia的信息,你可以微信搜索:JuliaAI好者社区 来关注我们,我们将不定期更新精彩内容。