go 中的uint16、int16 、int32区别和转换问题及其他细节理解

go 中的uint16、int16 、int32区别和转换问题及其他细节理解int8int16int 这里面的数字是位 就是 8 位 16 位 32 位 64 位 转换字节 是每八位代表一字节 8 位 16 位 32 位 64 位对应字节分别是 1 字节 2 字节 4 字节 8 字节

大家好,欢迎来到IT知识分享网。

背景:这块因为与硬件打交道,涉及字节和位,所以写了这篇播客。

这块知识是很基础的,这块在大学大一或大二就学的知识,结果忘完了,由于之前使用的java,不需要这些细节,所有一直没有深入,现在go语言有这个区分,还是好好学学理解消化一下。

首先解释下什么是无符合和有符号,有符号是包含负数的,无符号是非负数之外的数据。

基础普及:

int8 int16 int32 int64,这里面的数字是位,就是8位、16位、32位、64位,转换字节,是每八位代表一字节,8位、16位、32位、64位 对应字节分别是1字节 、2字节、4字节、8字节

上面都是大学知识啊,现在还得去理解,所以说大学学习还是重要的,否则工作后还得学。

接下来用go来进行理解这块哈

举个例子:

int8 int16 int32 int64 都是有符号的,看go的解释:

发现没,包含负数

go 中的uint16、int16 、int32区别和转换问题及其他细节理解

uint8 uint16 uint32 uint64 都是无符号的,看go的解释:

都是0到多少多少,

go 中的uint16、int16 、int32区别和转换问题及其他细节理解

如果赋值负数编辑器会提示报错

go 中的uint16、int16 、int32区别和转换问题及其他细节理解

咱们用代码跑一下看看效果:

从实际上看也是这样的,特别提醒,int 和unit默认是64位 8字节,也就是默认的是int64

go 中的uint16、int16 、int32区别和转换问题及其他细节理解

接下来咱们考虑另外一个问题,转换问题,既然有区分,那么转换就要注意了:

  我个人理解:

        1、  无符号类型的数据可以直接强转有符号类型即可,因为有符号的数据范围大于无符号的,代码测试:

使用uint16 直接可以转换成int16

go 中的uint16、int16 、int32区别和转换问题及其他细节理解

如果int16 转换uint16:

如果是int16是>=0的,是正常能获取正常值的

如果int16<0, 无法标识,因为最高位被解释为符号位。这个还是了解不够彻底,等后续了解清楚了,在进行补充。

go 中的uint16、int16 、int32区别和转换问题及其他细节理解

2、低范围转换高范围的也是可以直接转换的

例如unit16 转换为unit32可以直接转换,因为低范围可以直接转换到高范围。同理 int16直接转换int32,其他类型也是可以的。

go 中的uint16、int16 、int32区别和转换问题及其他细节理解

特别说明:

高范围转换低范围,超过的值默认给该类型最大值,例如uint16最大值是65535,所以转换时要注意

go 中的uint16、int16 、int32区别和转换问题及其他细节理解

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/121823.html

(0)
上一篇 2025-10-21 12:45
下一篇 2025-10-21 13:00

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信