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 中的 int64 类型。