在Go语言中,数字类型是其丰富数据类型的一部分,主要用于表示数值。
以下是Go语言中主要的数字类型详解:
1. 整数类型(Integer Types)
a) 固定长度整数:
-
有符号整数:
-
int8
:8位带符号整数,范围从-128到127。 -
int16
:16位带符号整数,范围从-32,768到32,767。 -
int32
:32位带符号整数,范围从-2,147,483,648到2,147,483,647。 -
int64
:64位带符号整数,范围从-9,223,372,036,854,775,808到9,223,372,036,854,775,807。
-
-
无符号整数:
-
uint8
或byte
:8位无符号整数,范围从0到255。 -
uint16
:16位无符号整数,范围从0到65,535。 -
uint32
:32位无符号整数,范围从0到4,294,967,295。 -
uint64
:64位无符号整数,范围从0到18,446,744,073,709,551,615。
-
b) 变长整数:
-
int
和uint
:长度取决于运行时平台,在32位系统上通常是32位,在64位系统上通常是64位。 -
uintptr
:无符号整数类型,足够容纳指针值。它的大小同样依赖于目标架构。
2. 浮点数类型(Floating-Point Types)
-
float32
:遵循IEEE-754标准的32位浮点数,提供大约7个有效数字精度。 -
float64
:遵循IEEE-754标准的64位浮点数,通常提供约15位有效数字精度,这是Go语言中最常用的浮点数类型。
3. 复数类型(Complex Number Types)
-
complex64
:由两个32位浮点数(实部和虚部)组成的复数,每个部分分别使用float32存储。 -
complex128
:由两个64位浮点数(实部和虚部)组成的复数,每个部分分别使用float64存储。
4. 类型转换
不同类型的数字之间不能隐式转换,需要通过显式类型转换操作来完成,例如:
var i int32 = 100
var u uint64 = uint64(i)
5. 数字字面量
Go语言支持以十进制、八进制(前缀0o
或0O
)、十六进制(前缀0x
或0X
)等方式书写数字字面量。
6. 注意事项
在使用数字类型时,需要注意可能发生的溢出错误。Go语言不会阻止整数类型的溢出操作,而是采用无符号整数的模运算方式处理,这意味着当增加一个正数超过最大值或减少一个负数低于最小值时,数值会“绕回”到相应的另一端。对于防止溢出,程序员应自行确保计算过程的安全性。文章来源:https://www.toymoban.com/news/detail-836201.html
实例
package main
import (
"fmt"
"math"
"unsafe"
)
func main() {
var i8 int8
var i16 int16
var i32 int32
var i64 int64
var ui8 uint8
var ui16 uint16
var ui32 uint32
var ui64 uint64
fmt.Printf("%T %dB %v~%v\n", i8, unsafe.Sizeof(i8), math.MinInt8, math.MaxInt8)
fmt.Printf("%T %dB %v~%v\n", i16, unsafe.Sizeof(i16), math.MinInt16, math.MaxInt16)
fmt.Printf("%T %dB %v~%v\n", i32, unsafe.Sizeof(i32), math.MinInt32, math.MaxInt32)
fmt.Printf("%T %dB %v~%v\n", i64, unsafe.Sizeof(i64), math.MinInt64, math.MaxInt64)
fmt.Printf("%T %dB %v~%v\n", ui8, unsafe.Sizeof(ui8), 0, math.MaxUint8)
fmt.Printf("%T %dB %v~%v\n", ui16, unsafe.Sizeof(ui16), 0, math.MaxUint16)
fmt.Printf("%T %dB %v~%v\n", ui32, unsafe.Sizeof(ui32), 0, math.MaxUint32)
fmt.Printf("%T %dB %v~%v\n", ui64, unsafe.Sizeof(ui64), 0, uint64(math.MaxUint64))
var f32 float32
var f64 float64
fmt.Printf("%T %dB %v~%v\n", f32, unsafe.Sizeof(f32), -math.MaxFloat32, math.MaxFloat32)
fmt.Printf("%T %dB %v~%v\n", f64, unsafe.Sizeof(f64), -math.MaxFloat64, math.MaxFloat64)
var ui uint
ui = uint(math.MaxUint64) //再+1会导致overflows错误
fmt.Printf("%T %dB %v~%v\n", ui, unsafe.Sizeof(ui), 0, ui)
var imax, imin int
imax = int(math.MaxInt64) //再+1会导致overflows错误
imin = int(math.MinInt64) //再-1会导致overflows错误
fmt.Printf("%T %dB %v~%v\n", imax, unsafe.Sizeof(imax), imin, imax)
}
运行结果:文章来源地址https://www.toymoban.com/news/detail-836201.html
int8 1B -128~127
int16 2B -32768~32767
int32 4B -2147483648~2147483647
int64 8B -9223372036854775808~9223372036854775807
uint8 1B 0~255
uint16 2B 0~65535
uint32 4B 0~4294967295
uint64 8B 0~18446744073709551615
float32 4B -3.4028234663852886e+38~3.4028234663852886e+38
float64 8B -1.7976931348623157e+308~1.7976931348623157e+308
uint 8B 0~18446744073709551615
int 8B -9223372036854775808~9223372036854775807
到了这里,关于编程笔记 Golang基础 016 数据类型:数字类型的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!