Golang中int, int8, int16, int32, int64和uint区别浅析
作者:跳舞的皮埃尔 发布时间:2024-04-25 15:05:06
前言
在学习go语言时,做算法题会很经常遇到go语言的各种int类型,为什么会有int、int8、int16等等的类型呢?为什么不像java一样,只个int类型呢?
测试
unsafe.Sizeof() 只返回数据类型的大小,不管引用数据的大小,单位为Byte
package main
import (
"fmt"
"unsafe"
)
func main() {
var a int = 1
var b int8 = 2
var c int16 = 3
var d int32 = 4
var e int64 = 5
fmt.Println(unsafe.Sizeof(a))
fmt.Println(unsafe.Sizeof(b))
fmt.Println(unsafe.Sizeof(c))
fmt.Println(unsafe.Sizeof(d))
fmt.Println(unsafe.Sizeof(e))
}
结果
F:\go\bin\go.exe build -o C:\Users\wang3\AppData\Local\Temp\GoLand\___go_build_test_go.exe G:\Gospace\leetcode\test.go #gosetup
C:\Users\wang3\AppData\Local\Temp\GoLand\___go_build_test_go.exe
8
1
2
4
8
结论
int类型的大小为 8 字节
int8类型大小为 1 字节
int16类型大小为 2 字节
int32类型大小为 4 字节
int64类型大小为 8 字节
我们看一下官方文档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.
意思是 int 是一个至少32位的有符号整数类型。但是,它是一个不同的类型,而不是int32的别名。int 和 int32 是两码事。uint is a variable sized type, on your 64 bit computer uint is 64 bits wide.
uint 是一种可变大小的类型,在64位计算机上,uint 是64位宽的。uint 和 uint8 等都属于无符号 int 类型。uint 类型长度取决于 CPU,如果是32位CPU就是4个字节,如果是64位就是8个字节。
补充:测试不同int类型的取值范围
测试有符号int情况
func TestIntRange(t *testing.T) {
// 不同int类型的取值范围
fmt.Println("不同int类型的取值范围:")
//fmt.Println("int:", math.MinInt, "~", math.MaxInt) 报错,没有 math.MinInt math.MaxInt
fmt.Println("int8:", math.MinInt8, "~", math.MaxInt8)
fmt.Println("int16:", math.MinInt16, "~", math.MaxInt16)
fmt.Println("int32:", math.MinInt32, "~", math.MaxInt32)
fmt.Println("int64:", math.MinInt64, "~", math.MaxInt64)
fmt.Println()
}
测试结果:
不同int类型的取值范围:
int8: -128 ~ 127
int16: -32768 ~ 32767
int32: -2147483648 ~ 2147483647
int64: -9223372036854775808 ~ 9223372036854775807
测试无符号不同int类型的取值范围
func TestUintRange(t *testing.T) {
fmt.Println("uint8:", 0, "~", math.MaxUint8)
fmt.Println("uint16:", 0, "~", math.MaxUint16)
fmt.Println("uint32:", 0, "~", math.MaxUint32)
//fmt.Println("uint64:", 0, "~", math.MaxUint64)
fmt.Println()
}
测试结果
=== RUN TestUintRange
uint8: 0 ~ 255
uint16: 0 ~ 65535
uint32: 0 ~ 4294967295--- PASS: TestUintRange (0.00s)
PASS
来源:https://blog.csdn.net/a6661314/article/details/122798788


猜你喜欢
- MySQL是一个非常流行的小型关系型数据库管理系统,2008年1月16号被Sun公司收购。目前MySQL被广泛地应用在Internet上的中
- 浏览器中某些计算和处理要比其他的昂贵的多。例如,DOM操作比起非DOM交互需要更多的内存和CPU时间。连续尝试进行过多的DOM相关操作可能会
- 用Python画一个平面的太阳系得到一些朋友的欣赏,然后有同学提出了绘制三维太阳系的要求。从Python画图的角度来说,三维太阳系其实并不难
- 前言本文主要给大家介绍了关于Three.js利用orbit controls插件(轨道控制)控制模型交互动作的相关内容,这个效果相对于第八节
- Css tranistions允许元素的属性在单位时间内发生平滑的过渡,在阅读完《CSS Transitions Module Level
- 前言CSRF全称Cross-site request forgery(跨站请求伪造),是一种网络的攻击方式,也被称为“One Click A
- 前言事务性数据字典与原子DDL,是MySQL 8.0推出的两个非常重要的新特性,之所以将这两个新特性放在一起,是因为两者密切相关,事务性数据
- 看一个例子d={'test':1}d_test=dd_test['test']=2print d如果你在命令
- 在Python中可以使用paramiko模块中的sftp登陆远程主机,实现上传和下载功能。1.功能实现根据输入参数判断是文件还是目录,进行上
- pytorch里面的maxpool,有一个属性叫ceil_mode,这个属性在api里面的解释是ceil_mode: when True,
- 一.权限表mysql数据库中的3个权限表:user 、db、 host权限表的存取过程是:1)先从user表中的host、 user、 pa
- pyc 文件的触发上一篇文章我们介绍了字节码,当时提到,py 文件在执行的时候会先被编译成 PyCodeObject 对象,并且该对象还会被
- 废话不多说, 先看代码创建一个钉钉机器人, 必须使用加签方式1. 安装 ding 模块包go get -u github.com
- SQL Server所谓的分布式查询(Distributed Query)是能够访问存放在同一部计算机或不同计算机上的SQL Server或
- 注:以String类型为例一.导出redis某个库的数据import redisimport jsonfile_path = "w
- Django使用mysqlclient服务连接并写入数据库准备1.创建Django程序,安装Django服务(详情请看上上节)2.创建子应用
- 1.表结构 2.表数据 3.查询teacher_name字段不能等于空并且也不能等于空字符SELECT * FROM s
- 当数据库的数据量读写频繁的时候,我们就要考虑把数据库的读写分开,以提高数据库的使用效率,(当然还有其他用处比如,备份数据),这个时候我们就要
- 1. argparse 模块简介argparse是一个用来解析命令行参数的 Python 库,它是 Python 标准库的一部分。基于 py
- Mysql是主流的开源关系型数据库,提供高性能的数据存储服务。在做后端开发时,有时会遇到性能瓶颈,这些瓶颈有时并不是来自应用本身,而是来自数