在 Go 语言中,整型分为以下两个大类:
-
有符号类型,按长度分为:
int8
、int16
、int32
、int64
-
无符号类型,与上面对应的分别是:
uint8
、uint16
、uint32
、uint64
PS: 这里
unit8
就是我们熟知的byte
型,int16
对应 C 语言中的short
型,int64
对应 C 语言中的long
类型。
一、自动匹配平台的 int 和 unit
看了上面这些类型,你可能在想,这也太繁琐了,有没有一种类型,它能根据平台 CPU 机器字节大小来调整长度呢?有的,那就是:
-
有符号类型:
int
-
无符号类型:
uint
这里 int
是应用最广泛的数值类型。这两种类型都有同样的大小,32
或 64bit
,但是我们不能对此做任何的假设, 因为不同的编译器即使在相同的硬件平台上可能产生不同的大小。
1.1、什么情况要使用 int 和 unit
实际应用中,切片或者 map
的元素数量均可通过 int
来表示。
但是,在二进制传输、读写文件的结构描述时,为了保证文件的结构不受不同编译目标平台的字节长度影响,不要使用 int
和 unit
。
二、整数类型 uintptr
最后,还有一种无符号的整数类型 uintptr
,它没有指定具体的 bit
大小但是足以容纳指针。uintptr
类型只有在底层编程时才需要,特别是 Go 语言和 C 语言函数库或操作系统接口相交互的地方。
尽管在某些特定的运行环境下 int
、uint
和 uintptr
的大小可能相等,但是它们依然是不同的类型,比如 int
和 int32
,虽然 int
类型的大小也可能是 32 bit
,但是在需要把 int
类型当做 int32
类型使用的时候必须显示的对类型进行转换,反之亦然。
Go 语言中有符号整数采用 2 的补码形式表示,也就是最高 bit
位用来表示符号位,一个 n-bit
的有符号数的取值范围是从 -2(n-1) 到 2(n-1)-1。无符号整数的所有 bit
位都用于表示非负数,取值范围是 0 到 2n-1。例如,int8 类型整数的取值范围是从 -128 到 127,而 uint8
类型整数的取值范围是从 0 到 255。
三、结语
本小节中,我们介绍了 Go 语言中的整型数据类型,希望大家学完能有所收获!