ZetCode

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 语言规范

本教程通过声明、转换、算术和格式化的实际示例,涵盖了 Go 中的 IntegerType。

作者

我叫 Jan Bodnar,我是一名充满激情的程序员,拥有丰富的编程经验。我从 2007 年开始撰写编程文章。迄今为止,我已撰写了 1400 多篇文章和 8 本电子书。我在编程教学方面拥有十多年的经验。

列出所有 Golang 教程