我发现 Go 中有不同的整数类型,这让我很困惑。鉴于许多其他主要编程语言中不存在这些区别,定义这些不同类别的必要性是什么?
int int8 int16 int32 int64
uint uint8 uint16 uint32 uint64 uintptr
最佳答案
Go 有两种类型:
- 架构相关类型,例如
int
、uint
、uintptr
。和 - 架构独立类型,例如
int32
、int64
等
依赖于体系结构的类型具有适合程序运行的机器的长度:
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/