前言
在学习 go 语言时,做算法题会很常常遇到 go 语言的各种 int 类型,为什么会有 int、int8、int16 等等的类型呢?为什么不像 java 一样,只个 int 类型呢?
测试
unsafe.Sizeof() 只返回数据类型的大小,不论援用数据的大小,单位为 Byte
package main
import (
"fmt"
"unsafe"
)
func main() {
var a int = 1
var b int8 = 2
var c int16 = 3
var d int32 = 4
var e int64 = 5
fmt.Println(unsafe.Sizeof(a))
fmt.Println(unsafe.Sizeof(b))
fmt.Println(unsafe.Sizeof(c))
fmt.Println(unsafe.Sizeof(d))
fmt.Println(unsafe.Sizeof(e))
}
后果
F:\go\bin\go.exe build -o C:\Users\wang3\AppData\Local\Temp\GoLand\___go_build_test_go.exe G:\Gospace\leetcode\test.go #gosetup
C:\Users\wang3\AppData\Local\Temp\GoLand\___go_build_test_go.exe
8
1
2
4
8
论断
- int 类型的大小为 8 字节
- int8 类型大小为 1 字节
- int16 类型大小为 2 字节
- int32 类型大小为 4 字节
- int64 类型大小为 8 字节
咱们看一下官网文档 int is a signed integer type that is at least 32 bits in size. It is a distinct type, however, and not an alias for, say, int32.
意思是 int 是一个至多 32 位的有符号整数类型。然而,它是一个不同的类型,而不是 int32 的别名。int 和 int32 是两码事。uint is a variable sized type, on your 64 bit computer uint is 64 bits wide.
uint 是一种可变大小的类型,在 64 位计算机上,uint 是 64 位宽的。uint 和 uint8 等都属于无符号 int 类型。uint 类型长度取决于 CPU,如果是 32 位 CPU 就是 4 个字节,如果是 64 位就是 8 个字节。
总结
go 语言中的 int 的大小是和操作系统位数相干的,如果是 32 位操作系统,int 类型的大小就是 4 字节。如果是 64 位操作系统,int 类型的大小就是 8 个字节