Golang IntegerType
最后修改时间 2025 年 5 月 8 日
本教程将介绍 Go 中的 IntegerType 内置类型。我们将通过在 Go 程序中使用它们的实际示例来涵盖所有整数类型。
Go 中的 IntegerType 代表有符号和无符号整数值。Go 提供了几种具有不同大小和范围的整数类型。这些包括依赖于体系结构和独立于体系结构类型的。
Go 中的整数类型用于表示整数。它们在大小、范围以及是否可以表示负数方面有所不同。选择正确的类型会影响内存使用和程序的正确性。
基本整数类型
Go 提供了几种具有固定大小的内置整数类型。此示例演示了基本整数类型及其范围。
注意: int 和 uint 的实际大小取决于平台。
basic_integers.go
package main import ( "fmt" "math" "unsafe" ) func main() { var i8 int8 = math.MaxInt8 var i16 int16 = math.MaxInt16 var i32 int32 = math.MaxInt32 var i64 int64 = math.MaxInt64 fmt.Printf("int8: %d (size: %d bytes)\n", i8, unsafe.Sizeof(i8)) fmt.Printf("int16: %d (size: %d bytes)\n", i16, unsafe.Sizeof(i16)) fmt.Printf("int32: %d (size: %d bytes)\n", i32, unsafe.Sizeof(i32)) fmt.Printf("int64: %d (size: %d bytes)\n", i64, unsafe.Sizeof(i64)) var u8 uint8 = math.MaxUint8 var u16 uint16 = math.MaxUint16 var u32 uint32 = math.MaxUint32 var u64 uint64 = math.MaxUint64 fmt.Printf("\nuint8: %d (size: %d bytes)\n", u8, unsafe.Sizeof(u8)) fmt.Printf("uint16: %d (size: %d bytes)\n", u16, unsafe.Sizeof(u16)) fmt.Printf("uint32: %d (size: %d bytes)\n", u32, unsafe.Sizeof(u32)) fmt.Printf("uint64: %d (size: %d bytes)\n", u64, unsafe.Sizeof(u64)) }
该示例显示了所有固定大小的整数类型及其最大值。我们使用 unsafe.Sizeof 来演示每种类型的内存大小。
依赖于体系结构的整数
Go 提供了 int 和 uint 类型,它们的大小取决于系统体系结构。此示例演示了平台相关的整数行为。
arch_integers.go
package main import ( "fmt" "math" "runtime" "unsafe" ) func main() { var i int = math.MaxInt var ui uint = math.MaxUint fmt.Printf("OS: %s, Arch: %s\n", runtime.GOOS, runtime.GOARCH) fmt.Printf("int: %d (size: %d bytes)\n", i, unsafe.Sizeof(i)) fmt.Printf("uint: %d (size: %d bytes)\n", ui, unsafe.Sizeof(ui)) // Demonstrate overflow behavior var smallInt int8 = 127 smallInt++ // Wraps around to -128 fmt.Printf("\nint8 overflow: %d\n", smallInt) }
该程序显示了当前平台上 int 和 uint 的大小。它还演示了整数溢出的行为,这些行为会静默地环绕。
整数类型转换
Go 要求在不同整数类型之间进行显式转换。此示例展示了正确的类型转换技术和潜在的陷阱。
type_conversions.go
package main import "fmt" func main() { var big int64 = 500 var small int8 // Explicit conversion required small = int8(big) fmt.Printf("Converted %d to %d\n", big, small) // Conversion with potential data loss big = 300 small = int8(big) fmt.Printf("Converted %d to %d (data loss occurred)\n", big, small) // Safe conversion checking if big >= math.MinInt8 >> big <= math.MaxInt8 { small = int8(big) fmt.Println("Safe conversion performed") } else { fmt.Println("Conversion would cause overflow") } }
该示例演示了 Go 中显式类型转换的语法。它展示了如何在执行转换之前检查潜在的溢出。
整数算术运算
Go 支持整数的标准算术运算。此示例显示了基本运算以及它们在不同整数类型下的行为。
arithmetic_operations.go
package main import "fmt" func main() { a := 20 b := 3 // Basic arithmetic fmt.Println("Addition:", a + b) fmt.Println("Subtraction:", a - b) fmt.Println("Multiplication:", a * b) fmt.Println("Division:", a / b) // Integer division fmt.Println("Remainder:", a % b) // Bitwise operations fmt.Println("\nBitwise AND:", a & b) fmt.Println("Bitwise OR:", a | b) fmt.Println("Bitwise XOR:", a ^ b) fmt.Println("Left shift:", a << 2) fmt.Println("Right shift:", a >> 1) // Overflow example var maxInt8 int8 = 127 fmt.Printf("\nMax int8 + 1 = %d (overflow)\n", maxInt8 + 1) }
该程序演示了标准算术和位运算。它还展示了整数除法行为和溢出示例。
整数文字和格式化
Go 支持整数文字和输出格式的不同格式。此示例显示了表示和显示整数的各种方法。
integer_literals.go
package main import "fmt" func main() { // Different base literals decimal := 42 binary := 0b101010 octal := 0o52 hex := 0x2A fmt.Println("Decimal:", decimal) fmt.Println("Binary:", binary) fmt.Println("Octal:", octal) fmt.Println("Hexadecimal:", hex) // Formatted output fmt.Printf("\nFormatted output:\n") fmt.Printf("Decimal: %d\n", decimal) fmt.Printf("Binary: %b\n", decimal) fmt.Printf("Octal: %o\n", decimal) fmt.Printf("Hex (lower): %x\n", decimal) fmt.Printf("Hex (upper): %X\n", decimal) // Underscores in literals (Go 1.13+) bigNumber := 1_000_000 fmt.Printf("\nFormatted with commas: %,d\n", bigNumber) }
该示例演示了 Go 中不同的整数文字格式。它展示了如何使用 fmt.Printf 进行各种基数的格式化输出。
来源
本教程通过声明、转换、算术和格式化的实际示例,涵盖了 Go 中的 IntegerType。