Golang uint 类型
最后修改时间 2025 年 5 月 8 日
本教程将讲解如何在 Go 中使用 `uint` 内置类型。我们将通过 uint 使用的实际示例,介绍无符号整数基础知识。
Go 中的 `uint` 类型代表无符号整数。与有符号整数不同,uint 值始终为正数。在相同的位数下,它们提供了比其有符号对应类型更大的正数值范围。
在 Go 中,`uint` 是与架构相关的,匹配 32 位或 64 位。对于特定大小,请使用 uint8、uint16、uint32 或 uint64。Uint 值不能表示负数。
基本的 uint 声明和用法
`uint` 最简单的用法是声明正数变量。此示例展示了基本的 uint 声明和算术运算。
注意: Uint 非常适合用于计数、大小和索引。
package main import "fmt" func main() { var a uint = 42 var b uint = 13 sum := a + b diff := a - b product := a * b fmt.Println("Sum:", sum) fmt.Println("Difference:", diff) fmt.Println("Product:", product) // Division with uint quotient := a / b remainder := a % b fmt.Println("Quotient:", quotient) fmt.Println("Remainder:", remainder) }
该示例演示了 uint 值的基本算术运算。所有运算都产生 uint 结果。减法产生的负结果将发生溢出。
Uint 大小变体
Go 提供了不同大小的 uint 类型。此示例展示了不同的 uint 类型及其最大值。
package main import ( "fmt" "math" ) func main() { var u8 uint8 = math.MaxUint8 var u16 uint16 = math.MaxUint16 var u32 uint32 = math.MaxUint32 var u64 uint64 = math.MaxUint64 fmt.Println("uint8 max:", u8) fmt.Println("uint16 max:", u16) fmt.Println("uint32 max:", u32) fmt.Println("uint64 max:", u64) // Platform-dependent uint size var u uint = math.MaxUint fmt.Println("uint max (platform dependent):", u) }
每个 uint 类型都有一个特定的最大值。普通的 `uint` 类型匹配平台的字长。数学常量有助于确定最大值。
Uint 在数组索引中的应用
Uint 值通常用于数组和切片索引。此示例演示了使用 uint 索引进行安全的数组访问。
package main import "fmt" func main() { data := []string{"apple", "banana", "cherry", "date"} // Using uint for indices var index uint = 2 fmt.Println("Element at index", index, ":", data[index]) // Safe iteration with uint for i := uint(0); i < uint(len(data)); i++ { fmt.Printf("data[%d] = %s\n", i, data[i]) } // Converting between int and uint intIndex := 3 uintIndex := uint(intIndex) fmt.Println("Converted index access:", data[uintIndex]) }
Uint 索引可防止负值,这些负值会导致运行时 panic。该示例展示了安全的迭代以及 int 和 uint 之间的类型转换。
Uint 的位运算
Uint 类型非常适合进行位运算。此示例演示了 uint 值的常用位操作技术。
package main import "fmt" func main() { var flags uint8 = 0b10101010 // Bitwise operations fmt.Printf("Original: %08b\n", flags) fmt.Printf("AND with 0xF0: %08b\n", flags & 0xF0) fmt.Printf("OR with 0x0F: %08b\n", flags | 0x0F) fmt.Printf("XOR with 0xFF: %08b\n", flags ^ 0xFF) fmt.Printf("NOT: %08b\n", ^flags) // Bit shifting fmt.Printf("Left shift by 2: %08b\n", flags << 2) fmt.Printf("Right shift by 2: %08b\n", flags >> 2) // Bit setting and clearing mask := uint8(1 << 3) flags |= mask // Set bit 3 flags &^= mask // Clear bit 3 }
Uint 类型支持所有位运算。该示例展示了 AND、OR、XOR、NOT 和移位操作。通过 uint 类型进行位操作非常精确。
Uint 在系统编程中的应用
Uint 类型对于系统级编程至关重要。此示例展示了 uint 在文件大小和内存地址方面的用法。
package main import ( "fmt" "os" "unsafe" ) func main() { // File size typically uses uint64 fileInfo, _ := os.Stat("example.txt") fileSize := uint64(fileInfo.Size()) fmt.Println("File size:", fileSize, "bytes") // Memory address demonstration var x int = 42 addr := uintptr(unsafe.Pointer(&x)) fmt.Printf("Memory address: 0x%x\n", addr) // System constants often use uint const pageSize uint = 4096 memory := uint(16 * 1024 * 1024 * 1024) // 16GB pages := memory / pageSize fmt.Println("Total pages:", pages) }
系统编程通常需要 uint 来表示大小和地址。该示例展示了文件大小处理、内存寻址和页面计算。Uint 可确保这些系统指标值为正数。
来源
本教程通过在各种上下文中无符号整数使用情况的实际示例,涵盖了 Go 中的 `uint` 类型。