大家好,欢迎来到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的解释:
发现没,包含负数
uint8 uint16 uint32 uint64 都是无符号的,看go的解释:
都是0到多少多少,
如果赋值负数编辑器会提示报错
咱们用代码跑一下看看效果:
从实际上看也是这样的,特别提醒,int 和unit默认是64位 8字节,也就是默认的是int64
接下来咱们考虑另外一个问题,转换问题,既然有区分,那么转换就要注意了:
我个人理解:
1、 无符号类型的数据可以直接强转有符号类型即可,因为有符号的数据范围大于无符号的,代码测试:
使用uint16 直接可以转换成int16
如果int16 转换uint16:
如果是int16是>=0的,是正常能获取正常值的
如果int16<0, 无法标识,因为最高位被解释为符号位。这个还是了解不够彻底,等后续了解清楚了,在进行补充。
2、低范围转换高范围的也是可以直接转换的
例如unit16 转换为unit32可以直接转换,因为低范围可以直接转换到高范围。同理 int16直接转换int32,其他类型也是可以的。
特别说明:
高范围转换低范围,超过的值默认给该类型最大值,例如uint16最大值是65535,所以转换时要注意
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/121823.html