时间:2021-05-22
在开始之前,我们先来看看uint 与 int 的区别
上面是图,下面是源码:
引言
今天调试一个问题,发现一个我无法理解的情况:
package mainimport ( "fmt" "math" "runtime")func main() { var a uint = math.MaxUint64 fmt.Println("Hello, playground", a, runtime.Version())}把64位的数字赋值给uint,我理解uint是32位的,为啥可以编译通过?但是我接着又在 playground 上试了一把,结果是编译不过了:
constant 18446744073709551615 overflows uint
int 和 uint 到底占多大空间?
其实我一直理解是32位的。因为别的语言是这样,惯性思维了。
直接看一下官方文档:
int is a signed integer type that is at least 32 bits in size. It is a distinct type, however, and not an alias for, say, int32.
uint和int情况差不多。翻译一下,就是说这个整形最少占32位,int和int32是两码事。
再看一下 davecheney 大神的回复(大神半夜回复 GitHub 真是敬业啊):
uint is a variable sized type, on your 64 bit computer uint is 64 bits wide.
我的理解uint类型长度取决于 CPU,如果是32位CPU就是4个字节,如果是64位就是8个字节。我的电脑是64位的,而 playground 是32位的,问题就出在这里。
More
这里就会出现一个情况,int和uint是根据 CPU 变化的,如何知道当前系统的情况?
写了这么多年 Golang,int天天用,一直被我当32位处理,说来惭愧。。。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
golang中的string是可以转换为byte数组或者rune数组但是其实byte对应的类型是uint8,而rune对应的数据类型就是int32所以strin
matlab数据类型包括: int8,8位有符号整数;uint8,8位无符号整数;int16,16位有符号整数;uint16,16位无符号整数;int32,3
总结了golang中字符串和各种int类型之间的相互转换方式:string转成int:int,err:=strconv.Atoi(string)string转成
由于opencv读入图片数据类型是uint8类型,直接加减会导致数据溢出现象(1)用Numpy操作可以先将图片数据类型转换成int类型进行计算,data=np.
前言在PHP,数字类型只有int和float两种,它们的位数取决于系统,而且没有uint,所以跟其它系统通信的时候就有诸多不便。如果int溢出,则自动转换为fl