Go 语言的整型(int)数据类型

还记得我们之前在第 7 小节和第 8 小节中提到的变量数据类型的概念吗?从这个小节开始到后面的几个小节中我们都会进行对 Go 语言中的数据类型相关知识点进行讲解,本节课我们主要讲解一下 Go 语言中处理带符号的整数的数据类型。

 

1. 定长类型

在 Go 语言中整形数据类型被细致地划分为了下面几种,根据可以存储数据的长度分为:

序号 类型 长度
1 int8 -128~127
2 int16 -32768~32767
3 int32 -2147483648~2147483647
4 int64 -9223372036854775808~9223372036854775807

 

2. 不定长类型

在 Go 语言中也实现了随着平台位数变化而变化的数据类型int。一般来说,这个类型在32位的系统中长度和int32一致,在64位的系统中长度和int64一致。

代码块
  • package main
  • 2
  • import (
  • 4      "fmt"
  • 5      "math"
  • )
  • 7
  • func main() {
  • 9        var num int
  • 10      num = math.MaxInt64//将e赋予int64的最大值:9223372036854775807
  • 11      fmt.Println(num)
  • 12  }

在 64 位操作系统环境中执行结果:

图片描述

64 位操作系统执行结果

在 32位 操作系统环境中,因为int的长度与int32相等了,只有32位,所以执行会报超出取值范围的错误:

图片描述

32 位操作系统执行结果

 

3. 各类型的互相转换

Go 语言是强类型语言,各个虽然同是整型,但是不同整型的变量不允许直接赋值,需要进行强制类型转换,同时长度大的整型向长度小的整型转换时,要考虑溢出问题。而且不同类的整型无法进行运算,想要进行运算必须要进行强制类型转换,使他们都变成同一类型之后,再运算。举一个int8int16类型的变量赋值与计算的例子:

代码块
  • package main
  • 2
  • import (
  • 4      "fmt"
  • 5      "math"
  • 6  )
  • 7
  • func main() {
  • 9        var a int8 = math.MaxInt8
  • 10      var b int16 = math.MaxInt8 + 1
  • 11      fmt.Println(a, b)
  • 12
  • 13      a = int8(b)
  • 14      fmt.Println(a, b) //因为b长度过长,在转换为int8的过程中溢出了
  • 15
  • 16      //整型变量可以和常数进行计算
  • 17      a = a + 1
  • 18      b = b + 1
  • 19      fmt.Println(a, b)
  • 20
  • 21      //不同类型的整型变量计算必须强转为相同类型,一般转换为长度大的来计算
  • 22      c := int16(a) + b
  • 23      fmt.Println(c)
  • 24  }

输出结果:

图片描述

各类型互相转换输出结果

 

3. 小结

这一小节中我们主要介绍了有符号整形数据类型,整形数据类型根据可以存储的数据长度分为了: int8 、 int16 、 int32 、 int64 ,我们在使用的时候要根据条件需求来决定变量的数据类型,同时也要注意高精度向低精度转失真的风险。

文章来源于网络,侵删!

相关新闻

历经多年发展,已成为国内好评如潮的Linux云计算运维、SRE、Devops、容器云、Go、Python开发专业人才培训机构!