Go 语言整型(整数类型)

更新时间 2022-03-31 14:44:30

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡 / 赠书活动

目前, 星球 内第一个项目:全栈前后端分离博客项目,演示地址:http://116.62.199.48/, 1.0 版本已经更新完毕,正在更新 2.0 版本。采用技术栈 Spring Boot + Mybatis Plus + Vue 3.x + Vite 4手把手,前端 + 后端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,陪伴式直到项目上线,目前已更新了 224 小节,累计 35w+ 字,讲解图:1544 张,还在持续爆肝中,后续还会上新更多项目,目标是将 Java 领域典型的项目都整上,如秒杀系统、在线商城、IM 即时通讯、权限管理等等,已有 1000+ 小伙伴加入,欢迎点击围观

Go语言整型数据Go语言整型数据

在 Go 语言中,整型分为以下两个大类:

  • 有符号类型,按长度分为: int8int16int32int64
  • 无符号类型,与上面对应的分别是: uint8uint16uint32uint64

PS: 这里 unit8 就是我们熟知的 byte型,int16 对应 C 语言中的 short型,int64对应 C 语言中的 long 类型。

一、自动匹配平台的 int 和 unit

看了上面这些类型,你可能在想,这也太繁琐了,有没有一种类型,它能根据平台 CPU 机器字节大小来调整长度呢?有的,那就是:

  • 有符号类型: int
  • 无符号类型uint

这里 int 是应用最广泛的数值类型。这两种类型都有同样的大小,3264bit,但是我们不能对此做任何的假设, 因为不同的编译器即使在相同的硬件平台上可能产生不同的大小。

1.1、什么情况要使用 int 和 unit

实际应用中,切片或者 map 的元素数量均可通过 int 来表示。

但是,在二进制传输、读写文件的结构描述时,为了保证文件的结构不受不同编译目标平台的字节长度影响,不要使用 intunit

二、整数类型 uintptr

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

尽管在某些特定的运行环境下 intuintuintptr 的大小可能相等,但是它们依然是不同的类型,比如 intint32,虽然 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 语言中的整型数据类型,希望大家学完能有所收获!