Go 语言整型(整数类型)

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

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

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

  • 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...点击查看项目介绍 ;
  • 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;

截止目前, 星球 内专栏累计输出 50w+ 字,讲解图 2200+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 1700+ 小伙伴加入学习 ,欢迎点击围观

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 语言中的整型数据类型,希望大家学完能有所收获!