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。