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一致。
package main
import (
    "fmt"
    "math"
)
func main() {
    var num uint
    num = math.MaxUint64 //将e赋予uint64的最大值:18446744073709551615
    fmt.Println(num)
}
在 64 位环境中执行结果:

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

64 位操作系统执行结果
3. 各类型的互相转换
Go 语言是强类型语言,各个虽然同是无符号整型,但是不同无符号整型的变量不允许直接赋值,需要进行强制类型转换,同时长度大的无符号整型向长度小的无符号整型转换时,要考虑 溢出 问题。而且不同类的整型无法进行运算,想要进行运算必须要进行强制类型转换,使他们都变成 同一类型 之后,再运算。举一个 uint8 和 uint16 类型的变量赋值与计算的例子:
package main
import (
    "fmt"
    "math"
)
func main() {
    var a uint8 = math.MaxUint8
    var b uint16 = math.MaxUint8 + 1
    fmt.Println(a, b)
    a = uint8(b)
    fmt.Println(a, b) //因为b长度过长,在转换为uint8的过程中溢出了
    //无符号整型变量可以和常数进行计算
    a = a + 1
    b = b + 1
    fmt.Println(a, b)
    //不同类型的无符号整型变量计算必须强转为相同类型,一般转换为长度大的来计算
    c := uint16(a) + b
    fmt.Println(c)
}
输出结果:

各类型相互转换输出结果
4. 小结
本文主要学习了 Go 语言中的无符号整型的使用,注意高精度向低精度转失真的风险。
          本文来自互联网用户投稿,不拥有所有权,该文观点仅代表作者本人,不代表本站立场。
访问者可将本网站提供的内容或服务用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯本网站及相关权利人的合法权利。
本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站,邮箱:80764001@qq.com,予以删除。
访问者可将本网站提供的内容或服务用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯本网站及相关权利人的合法权利。
本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站,邮箱:80764001@qq.com,予以删除。
