Golang中的int类型和uint类型到底有多大? - PHPERZ中文资讯站 - 胜博发888手机平台

发布于 2018-03-21 09:57:15 | 32 次阅读 | 评论: 0 | 来源: 网友投递

这里有新鲜出炉的GO语言教程,程序狗速度看过来!

Go语言

Go是一种新的语言,一种并发的、带垃圾回收的、快速编译的语言。Go是谷歌2009年发布的第二款编程语言。2009年7月份,谷歌曾发布了Simple语言,它是用来开发Android应用的一种BASIC语言。


int和uint类型在我们日常开发中经常会用到,但有个疑问就是这两个类型有多大,通过各种尝试最终得到了答案,所以下面这篇文章主要给大家介绍了关于Golang中的int类型和uint类型到底有多大的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下。

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

上面是图,下面是源码:


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) 
} 

引言

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


package main
import (
 "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 变化的,如何知道当前系统的情况?

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

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

总结

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



相关阅读 :
Golang中的int类型和uint类型到底有多大?
理解Golang中的数组(array)、切片(slice)和map
Go语言中的复合类型详细介绍
初步解读Golang中的接口相关编写方法
Golang中的sync.WaitGroup用法实例
Go语言中的变量声明和赋值
GOLANG版的冒泡排序和快速排序分享
深入理解Go语言中的数组和切片
Golang中的参数传递示例详解
golang中的net/rpc包使用概述(小结)
Go语言中的方法、接口和嵌入类型详解
Golang中Set类型的实现方法示例详解
最新网友评论  共有(0)条评论 发布评论 返回顶部
月排行榜

Copyright © 2007-2017 PHPERZ.COM All Rights Reserved   冀ICP备14009818号  版权声明  服务