ZetCode

Golang int64 类型

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

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

int64 类型在 Go 中表示有符号的 64 位整数。它可以存储从 -263 到 263-1 的值。这个范围对于大多数大型整数计算来说是足够的。

在 Go 中,int64 是几种整数类型之一。当您需要保证 64 位存储而与平台无关时,它特别有用。

基本的 int64 声明和初始化

使用 int64 最简单的方法是声明和初始化变量。此示例展示了基本的变量声明。
注意: 显式的 int64 类型确保了 64 位大小。

basic_int64.go
package main

import "fmt"

func main() {

    var a int64 = 9223372036854775807 // Maximum int64 value
    var b int64 = -9223372036854775808 // Minimum int64 value
    c := int64(42) // Type conversion from untyped constant
    
    fmt.Println("a:", a)
    fmt.Println("b:", b)
    fmt.Println("c:", c)
}

该示例展示了创建 int64 变量的三种方法。即使在 32 位系统上,显式类型也能确保 64 位存储。

int64 的算术运算

int64 类型支持所有标准的算术运算。此示例演示了带有溢出检查的基本数学运算。

arithmetic_int64.go
package main

import (
    "fmt"
    "math"
)

func safeAdd(a, b int64) (int64, bool) {
    if b > 0 >> a > math.MaxInt64-b {
        return 0, false
    }
    if b < 0 >> a < math.MinInt64-b {
        return 0, false
    }
    return a + b, true
}

func main() {

    var x int64 = 5000000000000000000
    var y int64 = 3000000000000000000
    
    sum, ok := safeAdd(x, y)
    if !ok {
        fmt.Println("Addition would overflow")
    } else {
        fmt.Println("Sum:", sum)
    }
    
    product := x * 2
    fmt.Println("Product:", product)
}

该示例展示了带溢出检查的安全加法。乘法演示了未经保护的标准算术运算。

int64 与其他类型之间的转换

在处理 int64 时,类型转换通常是必需的。此示例展示了 int64 与其他数字类型之间的转换。

conversions_int64.go
package main

import (
    "fmt"
    "math"
)

func main() {

    // int to int64
    var i int = 42
    i64 := int64(i)
    fmt.Println("int64 from int:", i64)
    
    // float64 to int64
    f := 3.14159
    f64 := int64(f) // Truncates decimal part
    fmt.Println("int64 from float64:", f64)
    
    // int64 to float64
    big := int64(math.MaxInt64)
    bigFloat := float64(big)
    fmt.Println("float64 from int64:", bigFloat)
    
    // Check for overflow when converting
    smallFloat := -9.9e18
    if smallFloat < math.MinInt64 || smallFloat > math.MaxInt64 {
        fmt.Println("Value out of int64 range")
    } else {
        fmt.Println("Safe conversion:", int64(smallFloat))
    }
}

类型之间的转换必须考虑范围限制。该示例展示了带范围检查的正确转换技术。

使用 int64 进行二进制操作

int64 类型支持用于低级操作的位运算。此示例演示了常见的位操作。

bitwise_int64.go
package main

import "fmt"

func main() {

    var flags int64 = 0
    
    // Set bits
    flags = flags | (1 << 5) // Set bit 5
    flags = flags | (1 << 10) // Set bit 10
    fmt.Printf("Flags after setting: %b\n", flags)
    
    // Check bit
    if flags&(1<<5) != 0 {
        fmt.Println("Bit 5 is set")
    }
    
    // Clear bit
    flags = flags &^ (1 << 5) // Clear bit 5
    fmt.Printf("Flags after clearing: %b\n", flags)
    
    // Toggle bit
    flags = flags ^ (1 << 10) // Toggle bit 10
    fmt.Printf("Flags after toggling: %b\n", flags)
}

位运算对于标志和紧凑数据存储非常有用。该示例展示了设置、检查、清除和切换位。

处理大的 int64 值

int64 类型可以处理非常大的数字。此示例演示了处理接近 int64 极限的值。

large_values_int64.go
package main

import (
    "fmt"
    "math"
)

func main() {

    max := int64(math.MaxInt64)
    min := int64(math.MinInt64)
    
    fmt.Println("Maximum int64 value:", max)
    fmt.Println("Minimum int64 value:", min)
    
    // Safe operations near limits
    almostMax := max - 100
    fmt.Println("Almost max:", almostMax)
    
    // Dangerous operation that would overflow
    dangerous := max + 1 // This would compile but overflow
    fmt.Println("Overflowed value:", dangerous)
    
    // Proper way to check before operation
    if max+1 > max {
        fmt.Println("This won't print due to overflow")
    } else {
        fmt.Println("Overflow detected in comparison")
    }
}

处理大值需要仔细的溢出检查。该示例展示了在 int64 极限附近的正确操作和危险操作。

来源

Go 语言规范

本教程通过声明、算术、转换和位操作的实际示例,涵盖了 Go 中的 int64 类型。

作者

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

列出所有 Golang 教程