2024-07-12
温故知新
00
请注意,本文编写于 57 天前,最后修改于 57 天前,其中某些信息可能已经过时。

目录

简介
int 和 uint
固定大小的整数类型
特殊整数类型
使用建议
示例代码
如何选择各个类型?
总结

简介

Go 语言中,int 类型和它的变种(如 uintint16int32 等)在位数和有符号性方面有所不同。以下是对这些类型的详细解释:

int 和 uint

  • int:有符号整型,其大小根据不同的平台而有所不同。在 32 位系统上,它是 32 位(4字节)的;在 64 位系统上,它是 64 位(8字节)的。
  • uint:无符号整型,与 int 相同,它的大小也根据平台而有所不同。
go
var a int // 有符号整型,根据平台大小不同 var b uint // 无符号整型,根据平台大小不同

固定大小的整数类型

这些类型的大小是固定的,无论在哪个平台上都相同:

int8:8 位(1 字节)的有符号整型,范围是 -128127uint8:8 位(1 字节)的无符号整型,范围是 0255int16:16 位(2 字节)的有符号整型,范围是 -3276832767uint16:16 位(2 字节)的无符号整型,范围是 065535int32:32 位(4 字节)的有符号整型,范围是 -21474836482147483647uint32:32 位(4 字节)的无符号整型,范围是 04294967295int64:64 位(8 字节)的有符号整型,范围是 -92233720368547758089223372036854775807uint64:64 位(8 字节)的无符号整型,范围是 018446744073709551615

go
var c int8 // 8 位有符号整型 var d uint8 // 8 位无符号整型 var e int16 // 16 位有符号整型 var f uint16 // 16 位无符号整型 var g int32 // 32 位有符号整型 var h uint32 // 32 位无符号整型 var i int64 // 64 位有符号整型 var j uint64 // 64 位无符号整型

特殊整数类型

uintptr:一种无符号整型,其大小足以存储指针值。它在 Go 语言中常用于指针运算或低级编程。

go
var k uintptr` // 用于存储指针值的无符号整型

使用建议

  1. 选择合适的类型:在编程时选择合适的整数类型非常重要。如果知道具体的范围和大小,可以选择 int8、int16 等固定大小的类型,以节省内存。
  2. 默认类型:在大多数情况下,使用 intuint 是一个合理的默认选择,因为它们的大小根据平台而调整,通常可以提供更好的性能。

示例代码

以下是一些类型定义和使用的示例:

go
package main import "fmt" func main() { var a int = -123 var b uint = 123 var c int8 = -128 var d uint8 = 255 var e int16 = -32768 var f uint16 = 65535 var g int32 = -2147483648 var h uint32 = 4294967295 var i int64 = -9223372036854775808 var j uint64 = 18446744073709551615 fmt.Println(a, b) fmt.Println(c, d) fmt.Println(e, f) fmt.Println(g, h) fmt.Println(i, j) }

如何选择各个类型?

  • int:通常是默认选择,因为它可以处理正数和负数。在绝大多数情况下,系统默认的 int 类型已经足够。使用 int 可以避免符号问题,并且其范围在 32 位和 64 位系统上都足够大。
  • uint:当你确定数值不会为负时(例如,数组或切片的索引,内存大小等),可以使用 uint。需要注意的是,使用无符号整型时要特别小心,因为它们不会处理负数,如果有可能出现负值的情况,建议使用 int
  • int8/uint8等:在一些对内存使用非常敏感的场景(如嵌入式系统、数据密集型应用)中,且知道变量的取值范围,可以选择合适的类型。例如,如果你只需要存储很小的整数,可以使用 int8uint8,因为它们只占用 1 个字节的内存。int16/uint16等其他同理。
  • uintptr:用于存储指针值,在低级编程和特定的内存操作场景中使用。

总结

  1. intuint:自动根据平台大小调整,有符号和无符号整型。
  2. 固定大小的整型:int8int16int32int64 以及它们对应的无符号类型 uint8uint16uint32uint64,大小固定。
  3. uintptr:用于存储指针值的无符号整型。

根据具体需求选择适合的整数类型,以确保代码的正确性和效率。

如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:DingDangDog

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!