Golang数字类型
golang 2023-10-09 13:49:50

Go语言支持整型和浮点型数字,并且原生支持复数,其中位的运算采用补码。

Go也有基于架构的类型,例如: int uintuintptr

这些类型的长度都是根据运行程序所在的操作系统类型所决定的:

    • int uint 在32 位操作系统上,它们均使用 32位(4个字节),在64 位操作系统上,它们均使用 64位(8个字节)。

    • uintptr 的长度被设定为足够存放一个指针即可。

Go 语言中没有 float 类型。(Go语言中只有 float32float64)没有double类型。

与操作系统架构无关的类型都有固定的大小,并在类型的名称中就可以看出来:

 

整数:

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 (0 ->255)

uint16 (0 -> 65,535)

uint32 (0 -> 4.294,967.295)

uint64 (O-> 18,446,744,073,709,551,615)

 

浮点型 (IEEE-754 标准):

    • float32 (+-1e-45 -> +-3.4* 1938)

    • float64 (+-5 * 1e-324 -> 107 * 1e308)

int 型是计算最快的一种类型。

整型的零值为 0,浮点型的零值为 0.0。

 

实例:

C/C++ Code复制内容到剪贴板
  1. var i8 int8  
  2. var i16 int16  
  3. var i32 int32  
  4. var i64 int64  
  5.   
  6. fmt.Printf("%T %dB %v~%v\n", i8, unsafe.Sizeof(i8), math.MinInt8, math.MaxInt8)  
  7. fmt.Printf("%T %dB %v~%v\n", i16, unsafe.Sizeof(i16), math.MinInt8, math.MaxInt16)  
  8. fmt.Printf("%T %dB %v~%v\n", i32, unsafe.Sizeof(i32), math.MinInt8, math.MaxInt32)  
  9. fmt.Printf("%T %dB %v~%v\n", i64, unsafe.Sizeof(i64), math.MinInt8, math.MaxInt64)  

 

输出:

int8 1B -128~127

int16 2B -128~32767

int32 4B -128~2147483647

int64 8B -128~9223372036854775807

uint8 1B 0~255

 

 

C/C++ Code复制内容到剪贴板
  1. var ui8 uint8  
  2. var ui16 uint16  
  3. var ui32 uint32  
  4. var ui64 uint64  
  5. fmt.Printf("%T %dB %v~%v\n", ui8, unsafe.Sizeof(ui8), 0, math.MaxUint8)  
  6. fmt.Printf("%T %dB %v~%v\n", ui16, unsafe.Sizeof(ui16), 0, math.MaxUint16)  
  7. fmt.Printf("%T %dB %v~%v\n", ui32, unsafe.Sizeof(ui32), 0, math.MaxUint32)  
  8. fmt.Printf("%T %dB %v~%v\n", ui64, unsafe.Sizeof(ui64), 0, uint64(math.MaxUint64))  

 

输出:

uint8 1B 0~255

uint16 2B 0~65535

uint32 4B 0~4294967295

uint64 8B 0~18446744073709551615 

 

C/C++ Code复制内容到剪贴板
  1. var f32 float32  
  2. var f64 float64  
  3. fmt.Printf("%T %dB %v~%v\n", f32, unsafe.Sizeof(f32), -math.MaxFloat32, math.MaxFloat32)  
  4. fmt.Printf("%T %dB %v~%v\n", f64, unsafe.Sizeof(f64), -math.MaxFloat64, math.MaxFloat64)  

 

输出:

float32 4B -3.4028234663852886e+38~3.4028234663852886e+38

float64 8B -1.7976931348623157e+308~1.7976931348623157e+308

 

PHP Code复制内容到剪贴板
  1. var ui uint  
  2. ui = uint(math.MaxUint64) // 再+1会导致overflows错误  
  3. fmt.Printf("%T %dB %v~%v\n", ui, unsafe.Sizeof(ui), 0, ui)  

 

输出:

uint 8B 0~18446744073709551615

 

 

PHP Code复制内容到剪贴板
  1. var imax, imin int  
  2. imax = int(math.MaxInt64) // 再+1会导致overflows错误  
  3. imin = int(math.MinInt64) // 再+1会导致overflows错误  
  4. fmt.Printf("%T %dB %v~%v\n", imax, unsafe.Sizeof(imax), imin, imax)  

 

输出:

 int 8B -9223372036854775808~9223372036854775807

 

以二进制、八进制或十六进制浮点数的格式定义数字

PHP Code复制内容到剪贴板
  1. // 十进制  
  2. var a int = 10  
  3. fmt.Printf("a: %d\n", a) // 10      输入二进制  
  4. fmt.Printf("a: %b\n", a) // 1010    占位符%b表示二进制输出  
  5.   
  6. // 八进制,以0开头  
  7. var b int = 077  
  8. fmt.Printf("b: %o\n", b) // 77      占位符%o表示八进制输出  
  9.   
  10. // 十六进制 以0x开头  
  11. var c int = 0xff  
  12. fmt.Printf("c: %x\n", c) // ff      占位符%x表示十六进制小写输出  
  13. fmt.Printf("c: %X\n", c) // FF      占位符%X表示十六进制大写输出  

 

浮点型

Go语言支持两种浮点型数: float32float64。这两种浮点型数据格式遵循 IEEE 754 标准: float32 的浮点数的最大范国约为 3.4e38,可以使用常量定义:math.MaxFloat32float64 的浮点数的最大范围约为
1.8e308,可以使用一个常量定义:math.MaxFloat64

打印浮点数时,可以使用 fmt 包配合动词 %f,代码如下:

PHP Code复制内容到剪贴板
  1. fmt.Printf("%f \n", math.Pi)   // 3.141593  
  2. fmt.Printf("%.2f \n", math.Pi) // 3.14  保留两位小数  

 

复数 

complex64和complex128,用的不多

PHP Code复制内容到剪贴板
  1. var c1 complex64 // 实部和虚部为32位  
  2. c1 = 1 + 2i  
  3. var c2 complex128 // 实部和虚部为64位  
  4. c2 = 2 + 3i  
  5.   
  6. fmt.Println(c1) // (1+2i)  
  7. fmt.Println(c2) // (2+3i)  

 

 


 

PHP Code复制内容到剪贴板
  1. i := 100  
  2. fmt.Printf("i: %T\n", i) // int %T打印是什么类型  

 

 

 

本文来自于:http://www.yoyo88.cn/study/golang/690.html

Powered by yoyo苏ICP备15045725号