Go 语言的无符号整型(uint)
上个小节我们主要学习了 Go 语言中的整型 int 数据类型,本小节主要介绍了 Go 语言中处理无符号的整数的数据类型。
1. 定长类型
序号 | 类型 | 长度 |
---|---|---|
1 | uint8 | 0~255 |
2 | uint16 | 0~65535 |
3 | uint32 | 0~4294967295 |
4 | uint64 | 0~18446744073709551615 |
2. 不定长类型
在 Go 语言中也实现了随着平台位数变化而变化的数据类型uint
。一般来说,这个类型在32位的系统中长度和uint32
一致,在64位的系统中长度和uint64
一致。
代码块
- 1
package main
- 2
- 3
import (
- 4
"fmt"
- 5
"math"
- 6
)
- 7
- 8
func main() {
- 9
var num uint
- 10
num = math.MaxUint64 //将e赋予uint64的最大值:18446744073709551615
- 11
fmt.Println(num)
- 12
}
在 64 位环境中执行结果:
在 32 位环境中,因为int
的长度与int32
相等了,只有32位,所以执行时会报超出取值范围的错误:
3. 各类型的互相转换
Go 语言是强类型语言,各个虽然同是无符号整型,但是不同无符号整型的变量不允许直接赋值,需要进行强制类型转换,同时长度大的无符号整型向长度小的无符号整型转换时,要考虑溢出问题。而且不同类的整型无法进行运算,想要进行运算必须要进行强制类型转换,使他们都变成同一类型之后,再运算。举一个 uint8
和 uint16
类型的变量赋值与计算的例子:
代码块
- 1
package main
- 2
- 3
import (
- 4
"fmt"
- 5
"math"
- 6
)
- 7
- 8
func main() {
- 9
var a uint8 = math.MaxUint8
- 10
var b uint16 = math.MaxUint8 + 1
- 11
fmt.Println(a, b)
- 12
- 13
a = uint8(b)
- 14
fmt.Println(a, b) //因为b长度过长,在转换为uint8的过程中溢出了
- 15
- 16
//无符号整型变量可以和常数进行计算
- 17
a = a + 1
- 18
b = b + 1
- 19
fmt.Println(a, b)
- 20
- 21
//不同类型的无符号整型变量计算必须强转为相同类型,一般转换为长度大的来计算
- 22
c := uint16(a) + b
- 23
fmt.Println(c)
- 24
}
输出结果:
4. 小结
本文主要学习了 Go 语言中的无符号整型的使用,注意高精度向低精度转失真的风险。
文章来源于网络,侵删!