types - 为什么 Go 有几种不同的整数类型?

标签 types go integer

我发现 Go 中有不同的整数类型,这让我很困惑。鉴于许多其他主要编程语言中不存在这些区别,定义这些不同类别的必要性是什么?

int  int8  int16  int32  int64
uint uint8 uint16 uint32 uint64 uintptr

最佳答案

Go 有两种类型:

  1. 架构相关类型,例如intuintuintptr。和
  2. 架构独立类型,例如int32int64

依赖于体系结构的类型具有适合程序运行的机器的长度:

  • int 是默认的有符号类型:它在 32 位上占用 32 位(4 个字节) 64 位机器上的位机器和 64 位(8 字节);无符号 uint 也是如此。
  • uintptr 是一个无符号整数,足以存储指针值。

架构独立类型具有固定的大小(以位为单位),由它们的名称指示:

对于整数,范围是:

int8 (-128 -> 127)
int16 (-32768 -> 32767)
int32 (− 2,147,483,648 -> 2,147,483,647)
int64 (− 9,223,372,036,854,775,808 -> 9,223,372,036,854,775,807)

对于无符号整数:

uint8 (with alias byte, 0 -> 255)
uint16 (0 -> 65,535)
uint32 (0 -> 4,294,967,295)
uint64 (0 -> 18,446,744,073,709,551,615)

对于 float :

float32 (+- 1O-45 -> +- 3.4 * 1038 )
(IEEE-754) float64 (+- 5 * 10-324 -> 1.7 * 10308 )

int 是提供最快处理速度的整数类型。 整数的初始(默认)值是 0,而 float 是 0.0 float32 可靠地精确到小数点后 7 位,float64 精确到小数点后 15 位。

由于将 float 与 ==!= 进行比较时不可能获得完美的准确性,因此必须非常小心!

关于types - 为什么 Go 有几种不同的整数类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31266352/

相关文章:

c++ - 如何检查两种类型是否来自同一个模板类

go - 已评估但未使用

go - 从 golang 的 echo 请求中提取 JSON

python - 如何操作整数/字符串中的数字?

c# - C# 类型的方法重载

scala - 我可以将 'nesting' 与 Scala 抽象类型一起使用来简化类定义吗?

c - 输入整数(无限制)并找到最小的(C语言)

r - 可视化 R 中整数数据的频率

java - 使 super 方法停止实现的方法

go - 如何通过调用结构方法来启动/停止功能