- Go语言支持整型和浮点型数字,并且原生支持复数,其中位的运算采用补码。
- Go也有基于架构的类型,如:int、uint和uintptr
- 这些类型的长度都是根据运行程序所在的操作系统类型所决定的:
- int和uint在32位操作系统上,它们均使用32位(4个字节),在64位操作系统上,它们均使用64位(8个字节)
- uintptr的长度被设定为足够存放一个指针即可。
- Go语言中没有float类型。(Go语言中只有float32和float64)没有double类型
- 与操作系统架构无关的类型都有固定的大小,并在类型的名称中就可以看出来:
- 整型:
- 其中,uint8就是我们熟知的byte型,int16对应C语言中的short型,int64对应C语言中的long型。
| 类型 | 描述 |
| uint8 | 无符号 8位整型 (0 到 255) |
| uint16 | 无符号 16位整型 (0 到 65535) |
| uint32 | 无符号 32位整型 (0 到 4294967295) |
| uint64 | 无符号 64位整型 (0 到 18446744073709551615) |
| int8 | 有符号 8位整型 (-128 到 127) |
| int16 | 有符号 16位整型 (-32768 到 32767) |
| int32 | 有符号 32位整型 (-2147483648 到 2147483647) |
| int64 | 有符号 64位整型 (-9223372036854775808 到 9223372036854775807) |
| 类型 | 描述 |
| float32 | +- le-45 -> +- 3.4*le38 |
| float64 | +-5*le-324 -> 107*le308 |
package main
import (
"fmt"
"math"
"unsafe"
)
func main() {
var i8 int8
var i16 int16
var i32 int32
var i64 int64
var ui8 uint8
var ui16 uint16
var ui32 uint32
var ui64 uint64
fmt.Printf("i8: %v~%v\n", i8, unsafe.Sizeof(i8), math.MinInt8, math.MaxInt8)
fmt.Printf("i16: %v~%v\n", i16, unsafe.Sizeof(i16), math.MinInt16, math.MaxInt16)
fmt.Printf("i32: %v~%v\n", i32, unsafe.Sizeof(i32), math.MinInt32, math.MaxInt32)
fmt.Printf("i16: %v~%v\n", i64, unsafe.Sizeof(i64), math.MinInt64, math.MaxInt64)
fmt.Printf("ui8: %v~%v\n", ui8, unsafe.Sizeof(ui8), 0, math.MaxUint8)
fmt.Printf("ui16: %v~%v\n", ui16, unsafe.Sizeof(ui16), 0, math.MaxUint16)
fmt.Printf("ui32: %v~%v\n", ui32, unsafe.Sizeof(ui32), 0, math.MaxUint32)
fmt.Printf("ui64: %v~%v\n", ui64, unsafe.Sizeof(ui64), 0, uint64(math.MaxUint64))
var f32 float32
var f64 float64
fmt.Printf("f32: %v~%v\n", f32, unsafe.Sizeof(f32), -math.MaxFloat32, math.MaxFloat32)
fmt.Printf("f64: %v~%v\n", f32, unsafe.Sizeof(f64), -math.MaxFloat64, math.MaxFloat64)
var imax, imin int
imax = int(math.MaxInt64) // 再+1会导致overflows错误
imin = int(math.MinInt64) // 再-1会导致overflows错误
fmt.Printf("%T %dB %v~%v\n", imax, unsafe.Sizeof(imax), imin, imax)
}
2、以二进制、八进制或十六进制浮点数的格式定义数字
package main
import (
"fmt"
"math"
"unsafe"
)
func jinzhi() {
// 十进制
var a int = 10
fmt.Printf("%d \n", a) // 10
fmt.Printf("%b \n", a) // 1010 占位符%b表示二进制
// 八进制 以o开头
var b int = 077
fmt.Printf("%o \n", b) // 77
// 十六进制 以0x开头
var c int = 0xff
fmt.Printf("%x \n", c) // ff
fmt.Printf("%X \n", c) // FF
}
func main() {
jinzhi()
}
# 输出结果
10
1010
77
ff
FF
3、浮点型
- Go语言支持两种浮点型数:float32和float64。这两种浮点型数据格式遵循IEEE 754标准: float32 的浮点数的最大范围约为 3.4e38,可以使用常量定义:math.MaxFloat32。 float64 的浮点数的最大范围约为 1.8e308,可以使用一个常量定义:math.MaxFloat64。
- 打印浮点数时,可以使用fmt包配合动词%f,代码如下:
func fudian() {
fmt.Printf("%f\n", math.Pi)
fmt.Printf("%.2f\n", math.Pi)
}
func main() {
fudian()
}
# 输出结果:
3.141593
3.14
4、复数
func fushu() {
var c1 complex64
c1 = 1 + 2i
var c2 complex128
c2 = 2 + 3i
fmt.Println(c1)
fmt.Println(c2)
}
func main() {
fushu()
# 输出结果
(1+2i)
(2+3i)
- 复数有实部和虚部,complex64的实部和虚部为32位,complex128的实部和虚部为64位。