Go   发布时间:2022-04-09  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Golang中的int类型和uint类型到底有多大?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

在开始之前,我们先来看看uint 与 int 的区别

Golang中的int类型和uint类型到底有多大?

上面是图,下面是源码:

@H_616_17@ package main import ( "fmt" _ "time" ) func main() { a := byte(255) //11111111 这是byte的极限, 因为 a := byte(256)//越界报错, 0~255正好256个数,不能再高了 b := uint8(255) //11111111 这是uint8的极限,因为 c := uint8(256)//越界报错,0~255正好256个数,不能再高了 c := int8(127) //01111111 这是int8的极限, 因为 b := int8(128)//越界报错, 0~127正好128个数,所以int8的极限只是256的一半 d := int8(a) //11111111 打印出来则是-0000001,int8(128)、int8(255)、int8(byte(255))都报错越界,因为int极限是127,但是却可以写:int8(a),第一位拿来当符号了 e := int8(C) //01111111 打印出来还是01111111 fmt.Printf("%08b %d \n",a,a) fmt.Printf("%08b %d \n",b,b) fmt.Printf("%08b %d \n",c,C) fmt.Printf("%08b %d \n",d,d) fmt.Printf("%08b %d \n",e,E) }

引言

今天调试一个问题,发现一个我无法理解的情况:

@H_616_17@ package main import ( "fmt" "math" "runtime" ) func main() { var a uint = math.MaxUint64 fmt.Println("Hello,playground",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位的,问题就出在这里

@H_714_2@more

这里就会出现一个情况,int和uint是根据 cpu 变化的,如何知道当前系统的情况?

  • cpu 型号:runtime.GOARCH
  • int的长度:strconv.IntSize

写了这么多年 Golang,int天天用,一直被我当32位处理,说来惭愧。。。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参学习价值,如果有疑问大家可以留言交流,谢谢大家对编程小技巧的支持

大佬总结

以上是大佬教程为你收集整理的Golang中的int类型和uint类型到底有多大?全部内容,希望文章能够帮你解决Golang中的int类型和uint类型到底有多大?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:golangintuint