Go 语言整型(整数类型)
一则或许对你有用的小广告
欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论
- 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于
Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...
,点击查看项目介绍 - 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/
截止目前, 星球 内专栏累计输出 80w+ 字,讲解图 3365+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2700+ 小伙伴加入学习 ,欢迎点击围观
在 Go 语言中,整型分为以下两个大类:
- 有符号类型,按长度分为:
int8
、int16
、int32
、int64
- 无符号类型,与上面对应的分别是:
uint8
、uint16
、uint32
、uint64
PS: 这里
unit8
就是我们熟知的byte
型,int16
对应 C 语言中的short
型,int64
对应 C 语言中的long
类型。
一、自动匹配平台的 int 和 unit
看了上面这些类型,你可能在想,这也太繁琐了,有没有一种类型,它能根据平台 CPU 机器字节大小来调整长度呢?有的,那就是:
- 有符号类型:
int
- 无符号类型:
uint
这里 int
是应用最广泛的数值类型。这两种类型都有同样的大小,32
或 64bit
,但是我们不能对此做任何的假设, 因为不同的编译器即使在相同的硬件平台上可能产生不同的大小。
1.1、什么情况要使用 int 和 unit
实际应用中,切片或者 map
的元素数量均可通过 int
来表示。
但是,在二进制传输、读写文件的结构描述时,为了保证文件的结构不受不同编译目标平台的字节长度影响,不要使用 int
和 unit
。
二、整数类型 uintptr
最后,还有一种无符号的整数类型 uintptr
,它没有指定具体的 bit
大小但是足以容纳指针。uintptr
类型只有在底层编程时才需要,特别是 Go 语言和 C 语言函数库或操作系统接口相交互的地方。
尽管在某些特定的运行环境下 int
、uint
和 uintptr
的大小可能相等,但是它们依然是不同的类型,比如 int
和 int32
,虽然 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 语言中的整型数据类型,希望大家学完能有所收获!