在 Go 语言中,int 类型和它的变种(如 uint、int16、int32 等)在位数和有符号性方面有所不同。以下是对这些类型的详细解释:
int:有符号整型,其大小根据不同的平台而有所不同。在 32 位系统上,它是 32 位(4字节)的;在 64 位系统上,它是 64 位(8字节)的。uint:无符号整型,与 int 相同,它的大小也根据平台而有所不同。govar a int   // 有符号整型,根据平台大小不同
var b uint  // 无符号整型,根据平台大小不同
这些类型的大小是固定的,无论在哪个平台上都相同:
int8:8 位(1 字节)的有符号整型,范围是 -128 到 127。
uint8:8 位(1 字节)的无符号整型,范围是 0 到 255。
int16:16 位(2 字节)的有符号整型,范围是 -32768 到 32767。
uint16:16 位(2 字节)的无符号整型,范围是 0 到 65535。
int32:32 位(4 字节)的有符号整型,范围是 -2147483648 到 2147483647。
uint32:32 位(4 字节)的无符号整型,范围是 0 到 4294967295。
int64:64 位(8 字节)的有符号整型,范围是 -9223372036854775808 到 9223372036854775807。
uint64:64 位(8 字节)的无符号整型,范围是 0 到 18446744073709551615。
govar 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 语言中常用于指针运算或低级编程。
govar k uintptr` // 用于存储指针值的无符号整型
int 和 uint 是一个合理的默认选择,因为它们的大小根据平台而调整,通常可以提供更好的性能。以下是一些类型定义和使用的示例:
gopackage 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等:在一些对内存使用非常敏感的场景(如嵌入式系统、数据密集型应用)中,且知道变量的取值范围,可以选择合适的类型。例如,如果你只需要存储很小的整数,可以使用 int8 或 uint8,因为它们只占用 1 个字节的内存。int16/uint16等其他同理。uintptr:用于存储指针值,在低级编程和特定的内存操作场景中使用。int 和 uint:自动根据平台大小调整,有符号和无符号整型。int8、int16、int32、int64 以及它们对应的无符号类型 uint8、uint16、uint32、uint64,大小固定。uintptr:用于存储指针值的无符号整型。根据具体需求选择适合的整数类型,以确保代码的正确性和效率。
本文作者:DingDangDog
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!