Go中数值类型可细分为整数、浮点数、复数三种,每种都具有不同的大小范围和正负支持。
整数
Go提供了有符号和无符号的整数类型,同时提供四种大小不同的整数类型。
- 整数类型根据有无符号(符号位)可分为有符号整数和无符号的整数
- 整数类型根据二进制
bit
位大小分为8bit、16bit、32bit、64bit四种
有符号整数包括 int8、int16、int32、int64,无符号整数包括uint8、uint16、uint32、uint64。另外,int
和uint
分别对应特定CPU平台的字长(机器字大小),大小范围在32bit
或64bit
之间变化,实际开发中由于编译器和硬件不同而不同。
取值范围
- 有符号整数采用2的补码形式表示,最高
bit
位表示符号位,因此取值范围从 -2^(n-1) 到 2^(n-1)-1。 - 无符号整数所有
bit
位都用于表示非负数,因此取值范围从 1 到 2^n-1。
等价类型
-
uint8
和byte
是等价类型,区别在于byte
类型用于强调数值是一个原始的数据而非小整数。 -
int32
可用于表示Unicode
字符即rune
类型,因此二者是等价的,均用于表示一个Unicode码点。
小数
Go语言提供了两种精度的浮点数分别为float32
和float64
,它们的算术规范由IEEE754浮点数国际标准定义,IEEE754浮点数标准被现代CPU支持。
float32
类型的浮点数可提供约6个十进制数的精度,float64
类型的浮点数可提供约15个十进制数的精度。通常会优先选择使用float64
,因为float32
累计计算误差会比较容易扩散。
- 浮点数的极限值可使用
math
包中的math.MaxFloat32
和math.MaxFloat64
常量获取。 - 浮点数声明时可只写整数部分或小数部分,不可省略小数点。
- 较大或较小的浮点数可采用科学计数法通过
e
或E
来指定指数部分 - 格式化输出浮点数时使用
%f
来控制保留小数位数
复数
计算机中复数(complex)由两个浮点数表示,一个表示实部(real)一个表示虚部(imag)。
Go语言中复数的值由三部分组成RE + IMi
,分别是实数部分RE
、虚数部分IM
、虚数单位i
,RE
和IM
均为float
。
Go语言提供两种类型的复数,分别是complex64
即32位实数和虚数,complex128
即64位实数和虚数,complex128
为复数的默认类型。
复数声明
var z complex128 = complex(x, y)
z
表示复数的变量名,complex128
表示复数类型,complex()
内置函数用于为复数赋值。x
和y
分别表示构成该复数的两个float64
类型的值,x
为实部,y
为虚部。
简写形式
z := complex(x, y)
对于z
值可通过内置函数real(z)
获取该复数的实部,使用imag(z)
获取虚部。