【Go】10、go语言数字类型

  • Go语言支持整型和浮点型数字,并且原生支持复数,其中位的运算采用补码。
  • Go也有基于架构的类型,如:int、uint和uintptr
  • 这些类型的长度都是根据运行程序所在的操作系统类型所决定的:
    • int和uint在32位操作系统上,它们均使用32位(4个字节),在64位操作系统上,它们均使用64位(8个字节)
    • uintptr的长度被设定为足够存放一个指针即可
  • Go语言中没有float类型。(Go语言中只有float32和float64)没有double类型
  • 与操作系统架构无关的类型都有固定的大小,并在类型的名称中就可以看出来:
  • 整型:
    • 其中,uint8就是我们熟知的byte型,int16对应C语言中的short型,int64对应C语言中的long型。
类型描述
uint8无符号 8位整型 (0 到 255)
uint16无符号 16位整型 (0 到 65535)
uint32无符号 32位整型 (0 到 4294967295)
uint64无符号 64位整型 (0 到 18446744073709551615)
int8有符号 8位整型 (-128 到 127)
int16有符号 16位整型 (-32768 到 32767)
int32有符号 32位整型 (-2147483648 到 2147483647)
int64有符号 64位整型 (-9223372036854775808 到 9223372036854775807)
    • int型是计算最快的一种类型   
    • 整型的零值是0
  • 浮点型
类型描述
float32+- le-45 -> +- 3.4*le38
float64+-5*le-324 -> 107*le308
    • 浮点型的零值为0.0
  • 举例:
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("i8: %v~%v\n", i8, unsafe.Sizeof(i8), math.MinInt8, math.MaxInt8)
	fmt.Printf("i16: %v~%v\n", i16, unsafe.Sizeof(i16), math.MinInt16, math.MaxInt16)
	fmt.Printf("i32: %v~%v\n", i32, unsafe.Sizeof(i32), math.MinInt32, math.MaxInt32)
	fmt.Printf("i16: %v~%v\n", i64, unsafe.Sizeof(i64), math.MinInt64, math.MaxInt64)

	fmt.Printf("ui8: %v~%v\n", ui8, unsafe.Sizeof(ui8), 0, math.MaxUint8)
	fmt.Printf("ui16: %v~%v\n", ui16, unsafe.Sizeof(ui16), 0, math.MaxUint16)
	fmt.Printf("ui32: %v~%v\n", ui32, unsafe.Sizeof(ui32), 0, math.MaxUint32)
	fmt.Printf("ui64: %v~%v\n", ui64, unsafe.Sizeof(ui64), 0, uint64(math.MaxUint64))

	var f32 float32
	var f64 float64

	fmt.Printf("f32: %v~%v\n", f32, unsafe.Sizeof(f32), -math.MaxFloat32, math.MaxFloat32)
	fmt.Printf("f64: %v~%v\n", f32, unsafe.Sizeof(f64), -math.MaxFloat64, math.MaxFloat64)

	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)
}
2、以二进制、八进制或十六进制浮点数的格式定义数字
package main

import (
	"fmt"
	"math"
	"unsafe"
)

func jinzhi() {
	// 十进制
	var a int = 10
	fmt.Printf("%d \n", a) // 10
	fmt.Printf("%b \n", a) // 1010  占位符%b表示二进制

	// 八进制 以o开头
	var b int = 077
	fmt.Printf("%o \n", b) // 77

	// 十六进制  以0x开头
	var c int = 0xff
	fmt.Printf("%x \n", c) // ff
    fmt.Printf("%X \n", c) // FF
}

func main() {
	jinzhi()
}
# 输出结果
    10 
    1010 
    77 
    ff 
    FF
3、浮点型
  • Go语言支持两种浮点型数:float32和float64。这两种浮点型数据格式遵循IEEE 754标准: float32 的浮点数的最大范围约为 3.4e38,可以使用常量定义:math.MaxFloat32float64 的浮点数的最大范围约为 1.8e308,可以使用一个常量定义:math.MaxFloat64
  • 打印浮点数时,可以使用fmt包配合动词%f,代码如下:
func fudian() {
	fmt.Printf("%f\n", math.Pi)
	fmt.Printf("%.2f\n", math.Pi)
}

func main() {
	fudian()
}

# 输出结果:
    3.141593
    3.14
4、复数
  • complex64和complex128
func fushu() {
	var c1 complex64
	c1 = 1 + 2i
	var c2 complex128
	c2 = 2 + 3i

	fmt.Println(c1)
	fmt.Println(c2)
}

func main() {
	fushu()

# 输出结果
    (1+2i)
    (2+3i)
  • 复数有实部和虚部,complex64的实部和虚部为32位complex128的实部和虚部为64位。
posted @   郭祺迦  阅读(54)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示