golang:整型

怼烎@ 2022-09-07 06:16 305阅读 0赞

Go语言的数值类型分为以下几种:整数、浮点数、复数,其中每一种都包含了不同大小的数值类型,例如有符号整数包含 int8、int16、int32、int64 等,每种数值类型都决定了对应的大小范围和是否支持正负符号。本节我们主要介绍一下整数类型。

Go语言同时提供了有符号和无符号的整数类型:

  • 其中包括 int8、int16、int32 和 int64 四种大小截然不同的有符号整数类型,分别对应 8、16、32、64 bit(二进制位)大小的有符号整数
  • 与此对应的是 uint8、uint16、uint32 和 uint64 四种无符号整数类型。

此外还有两种整数类型 int 和 uint。它们分别对应特定 CPU 平台的字长(机器字大小):

  • 其中 int 表示有符号整数,应用最为广泛
  • uint 表示无符号整数。

实际开发中由于编译器和计算机硬件的不同,int 和 uint 所能表示的整数大小会在 32bit 或 64bit 之间变化

大多数情况下,我们只需要 int 一种整型即可,它可以用于循环计数器(for 循环中控制循环次数的变量)、数组和切片的索引,以及任何通用目的的整型运算符,通常 int 类型的处理速度也是最快的。

  • 用来表示Unicode字符的rune类型和int32类型是等价的,通常用于表示一个Unicode码点。这两个名称可以互换使用。
  • 同样,byte 和 uint8 也是等价类型,byte 类型一般用于强调数值是一个原始的数据而不是一个小的整数

最后,还有一种无符号的整数类型 uintptr:

  • 它没有指定具体的 bit 大小但是足以容纳指针
  • uintptr 类型只有在底层编程时才需要,特别是Go语言和C语言函数库或操作系统接口相交互的地方。

Go语言中有符号整数采用 2 的补码形式表示,也就是最高 bit 位用来表示符号位,一个 n-bit 的有符号数的取值范围是从 − 2 ( n − 1 ) -2^{(n-1)} −2(n−1)到 2 ( n − 1 ) − 1 2^{(n-1)}-1 2(n−1)−1。无符号整数的所有 bit 位都用于表示非负数,取值范围是 0 到 2 n − 1 2^n-1 2n−1。例如,int8 类型整数的取值范围是从 -128 到 127,而 uint8 类型整数的取值范围是从 0 到 255。

哪些情况下使用 int 和 uint

程序逻辑对整型范围没有特殊需求。例如,对象的长度使用内建 len() 函数返回,这个长度可以根据不同平台的字节长度进行变化。实际使用中,切片或 map 的元素数量等都可以用 int 来表示。

反之,在二进制传输、读写文件的结构描述时,为了保持文件的结构不会受到不同编译目标平台字节长度的影响,不要使用 int 和 uint

发表评论

表情:
评论列表 (有 0 条评论,305人围观)

还没有评论,来说两句吧...

相关阅读

    相关 提升

    何为整型提升 C的整型算术运算总是至少以缺省整型类型的精度来进行的,我个人的理解是:C语言算术运算中字节数少于整型字节数的数据类型在进行整形运算中会被转化为整型数据,这个

    相关 golang

    > Go语言的数值类型分为以下几种:整数、浮点数、复数,其中每一种都包含了不同大小的数值类型,例如有符号整数包含 int8、int16、int32、int64 等,每种数值类型

    相关

    Go语言基础之基本数据类型 除了基本的整型,浮点型,布尔型,字符串外,还有数组,切片,结构体,函数,map,通道(channel)等,Go语言的基本类型和其他语言大同小异