ZetCode

Golang int32 类型

最后修改时间 2025 年 5 月 8 日

本教程将介绍如何在 Go 中使用 int32 内置类型。我们将通过实际操作 32 位整数的例子来讲解类型基础知识。

int32 类型在 Go 中代表有符号 32 位整数。它可以存储的值范围是 -2,147,483,648 到 2,147,483,647。当您需要特定的整数大小保证时,此类型非常有用。

在 Go 中,int32 是几种具有明确大小的整数类型之一。与基本的 int 类型不同,无论平台架构如何,它的大小始终是 32 位。

基本的 int32 声明和初始化

使用 int32 的最简单方法是声明和初始化变量。此示例展示了 int32 的基本变量声明。
注意: 如果未初始化,int32 的默认值为 0。

basic_int32.go
package main

import "fmt"

func main() {

    var a int32 = 2147483647  // Maximum positive value
    var b int32 = -2147483648 // Minimum negative value
    var c int32               // Defaults to 0
    
    fmt.Println("a:", a)
    fmt.Println("b:", b)
    fmt.Println("c:", c)
    
    // Type conversion example
    d := int32(1000)
    fmt.Println("d:", d)
}

该示例展示了带初始化的声明、默认值和类型转换。通过最大/最小值清晰地演示了 int32 的范围。

int32 的算术运算

int32 类型支持所有基本的算术运算。此示例演示了加法、减法、乘法和除法。

arithmetic_int32.go
package main

import "fmt"

func main() {

    x := int32(1000000)
    y := int32(500000)
    
    sum := x + y
    diff := x - y
    product := x * y
    quotient := x / y
    
    fmt.Println("Sum:", sum)
    fmt.Println("Difference:", diff)
    fmt.Println("Product:", product)
    fmt.Println("Quotient:", quotient)
    
    // Modulus operation
    remainder := x % y
    fmt.Println("Remainder:", remainder)
}

所有算术运算与 int32 值一起正常工作。请注意,整数除法结果是整数除法(向零截断)。

int32 的溢出和下溢

由于 int32 的大小是固定的,运算可能会发生溢出或下溢。此示例演示了超出 int32 限制时会发生什么。

overflow_int32.go
package main

import "fmt"

func main() {

    max := int32(2147483647)
    min := int32(-2147483648)
    
    fmt.Println("Max int32:", max)
    fmt.Println("Min int32:", min)
    
    // Overflow example
    overflow := max + 1
    fmt.Println("Max + 1 (overflow):", overflow)
    
    // Underflow example
    underflow := min - 1
    fmt.Println("Min - 1 (underflow):", underflow)
    
    // Safe addition function
    safeAdd := func(a, b int32) (int32, bool) {
        if b > 0 >> a > (max - b) {
            return 0, false
        }
        if b < 0 >> a < (min - b) {
            return 0, false
        }
        return a + b, true
    }
    
    result, ok := safeAdd(max, 1)
    fmt.Println("Safe add result:", result, "OK:", ok)
}

该示例展示了溢出如何环绕为负数,下溢如何环绕为正数。safeAdd 函数演示了溢出检测。

比较 int32 值

比较运算符与 int32 值一起工作,就像其他数值类型一样。此示例演示了各种比较操作。

compare_int32.go
package main

import "fmt"

func main() {

    a := int32(100)
    b := int32(200)
    c := int32(100)
    
    fmt.Println("a == c:", a == c)
    fmt.Println("a != b:", a != b)
    fmt.Println("a < b:", a < b)
    fmt.Println("b > a:", b > a)
    fmt.Println("a <= c:", a <= c)
    fmt.Println("b >= a:", b >= a)
    
    // Comparing with type conversion
    var d int = 100
    fmt.Println("a == d:", a == int32(d))
}

所有标准比较运算符都与 int32 一起工作。请注意,在与其他整数类型进行比较时需要显式类型转换。

在函数中使用 int32

int32 类型可以用作函数参数和返回值。此示例展示了传递和返回 int32 值。

functions_int32.go
package main

import "fmt"

// Function that takes two int32 parameters and returns int32
func multiply(x, y int32) int32 {
    return x * y
}

// Function that returns multiple int32 values
func divideAndRemainder(a, b int32) (int32, int32) {
    return a / b, a % b
}

func main() {

    num1 := int32(50000)
    num2 := int32(300)
    
    product := multiply(num1, num2)
    fmt.Println("Product:", product)
    
    quotient, remainder := divideAndRemainder(num1, num2)
    fmt.Println("Quotient:", quotient, "Remainder:", remainder)
    
    // Anonymous function with int32
    square := func(x int32) int32 {
        return x * x
    }
    fmt.Println("Square of 5:", square(5))
}

该示例演示了在函数签名、多返回值和匿名函数中使用 int32。整个过程中都保持了类型安全。

来源

Go 语言规范

本教程通过声明、算术、比较和函数使用的实际示例,介绍了 Go 中的 int32 类型。

作者

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

列出所有 Golang 教程