Go 编程 | 连载03 - 布尔类型和数值类型

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第3天,点击查看活动详情

一、Go 语言中的基本数据类型

Go 语言中的基本数据类型包含了三种,分别是 布尔类型数值类型以及字符(串) 类型三种,其中数值类型又分为 整数类型浮点数类型复数类型字节类型rune 类型

二、Go 语言中的布尔类型

Go 中的布尔类型使用符号 bool 来表示,布尔值只有 true 和 false 两个值,占用 1 个字节。布尔类型常用流程控制语句以及函数返回值。

func main() {

   isOk := true
   isClosed := false
   fmt.Println("bool 类型数据所占的字节大小为:", unsafe.Sizeof(isOk))
   fmt.Println("bool 类型数据所占的字节大小为:", unsafe.Sizeof(isClosed))
   
   // 获取变量类型
   fmt.Printf("isOk 变量的类型是:%T\n", isOk)
   fmt.Printf("isClosed 变量的类型是:%T\n", isClosed) 

}

执行上述代码,输出结果如下:

bool 类型数据 true 所占的字节大小为: 1
bool 类型数据 false 所占的字节大小为: 1
isOk 变量的类型是:bool
isClosed 变量的类型是:bool

这里用到了 unsafe 包下的 Sizeof 函数,用于获取数据所占的字节大小。可以看出 true 和 false 都是占用了 1 个字节。

获取变量类型要使用格式化输出函数 fmt.Printf,使用 %T 来表示输出变量的类型,其他常用的占位符还有 %v 格式化输出变量的值,fmt.Printf 函数不会自动换行。

与其他语言不同的是 Go 中的布尔类型是不能够与其他类型的数据进行相互转换的。

image.png

三、Go 语言中的数值类型

整数类型

整数类型占用字节大小以及有无符号来划分可以分为以下几种:

  • int8 有符号 8 位整型 (-128 到 127)
  • int16 有符号 16 位整型 (-32768 到 32767)
  • int32 有符号 32 位整型 (-2147483648 到 2147483647)
  • int64 有符号 64 位整型 (-9223372036854775808 到 9223372036854775807)
  • uint8 无符号 8 位整型 (0 到 255) 8位都用于表示数值:
  • uint16 无符号 16 位整型 (0 到 65535)
  • uint32 无符号 32 位整型 (0 到 4294967295)
  • uint64 无符号 64 位整型 (0 到 18446744073709551615)

不同的整型所占字节大小

func main() {

   var a int8 = -10
   var b int16 = -20
   var c int32 = -30
   var d int64 = -80

   var e uint8 = 10
   var f uint16 = 20
   var g uint32 = 30
   var h uint64 = 80

   fmt.Println("int8 和 uint8 所占字节为:", unsafe.Sizeof(a), unsafe.Sizeof(e))
   fmt.Println("int16 和 uint16 所占字节为:", unsafe.Sizeof(b), unsafe.Sizeof(f))
   fmt.Println("int32 和 uint32 所占字节为:", unsafe.Sizeof(c), unsafe.Sizeof(g))
   fmt.Println("int64 和 uint64 所占字节为:", unsafe.Sizeof(d), unsafe.Sizeof(h))
}

执行上述代码,输出结果如下:

int8 和 uint8 所占字节为: 1 1
int16 和 uint16 所占字节为: 2 2
int32 和 uint32 所占字节为: 4 4
int64 和 uint64 所占字节为: 8 8

int 与 unit 类型

除了上面提到的占用不同字节大小的整数值类型外,intuint 也可以表示整数,它是一种动态类型,所占字节大小取决于操作系统的位数:

  • 如果是32位操作系统,int类型的大小就是4字节
  • 如果是64位操作系统,int类型的大小就是8个字节
func main() {

   var z int = 10
   fmt.Printf("变量 z 的类型为:%T, 所占字节大小为:%v", z, unsafe.Sizeof(z))
}

浮点数类型

Go 中浮点数按照字节大小划分可以分为 float32float64

func main() {

   var y float32 = 1.0
   var z float64 = 2.0

   fmt.Println("float32 所占的字节大小为:", unsafe.Sizeof(y))
   fmt.Println("float64 所占的字节大小为:", unsafe.Sizeof(z))
   fmt.Println("float32 可表示的最大数为:", math.MaxFloat32)
   fmt.Println("float32 可表示的最大数为:", math.MaxFloat64)
}

执行上述代码,输出结果如下:

float32 所占的字节大小为: 4
float64 所占的字节大小为: 8
float32 可表示的最大数为: 3.4028234663852886e+38
float32 可表示的最大数为: 1.7976931348623157e+308

复数类型

Go语言中复数的类型有两种,分别是  complex128(64 位实数和虚数)和 complex64(32 位实数和虚数),其中 complex128 为复数的默认类型。

复数的值由三部分组成 RE + IMi,其中 RE 是实数部分,IM 是虚数部分,RE 和 IM 均为 float 类型,而最后的 i 是虚数单位。

func main() {

   var x complex64 = complex(1, 2)
   var y complex64 = complex(3, 4)
   fmt.Println(x * y)
   fmt.Println(real(x * y))
   fmt.Println(imag(x * y))
}

执行上述代码,输出结果如下:

(-5+10i)
-5
10

real(z)来获得该复数的实部,通过imag(z) 获得该复数的虚部。

数值类型的操作

Go 中数值相关的操作大部分都在 math 包下,包含了大量数值类型的计算操作。

image.png

常用的操作如下:

func main() {

   var a = 10.0
   // 取绝对值
   fmt.Println(math.Abs(a))

   var b = 64.0
   // 取平方根
   fmt.Println(math.Sqrt(b))

   var c = 3.0
   // 幂次方,获取 a 的 c 次方值
   fmt.Println(math.Pow(a, c))

   var d = 27.0
   // 开立方根
   fmt.Println(math.Cbrt(d))

   var e = 5.9
   // 向上取整
   fmt.Println(math.Ceil(e))

   var f = 7.0
   // 向下取整
   fmt.Println(math.Floor(f))

   // 比较大小 
   fmt.Println(math.Max(e, f))
   fmt.Println(math.Min(e, f))
}

执行上述代码,输出结果如下:

10
8
1000
3
6
7
7
5.9

猜你喜欢

转载自juejin.im/post/7125847910922584094