Julia原始数据类型--整数,浮点数

弱小与无知不是生存的障碍,傲慢才是。 -- 刘慈欣 《三体》

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好者社区 来关注我们,我们将不定期更新精彩内容。

你可能感兴趣的:(Julia原始数据类型--整数,浮点数)