Golang int 类型
最后修改时间 2025 年 5 月 8 日
本教程将介绍如何在 Go 中使用 int 内置类型。我们将通过实际示例来讲解整数基础知识以及如何处理数字。
int 类型在 Go 中表示带符号的整数值。它的大小取决于平台,在 32 位系统上为 32 位,在 64 位系统上为 64 位。Go 还提供了明确大小的整数类型,如 int8、int16 等。
在 Go 中,int 是最常用的整数类型。它适用于大多数整数运算,并在各种平台上提供良好的性能。值的范围取决于系统架构。
基本整数声明和初始化
int 最简单的用法是声明和初始化变量。此示例演示了基本的整数运算。
注意: Go 的类型系统非常严格,因此整数不能与其他类型混合。
package main
import "fmt"
func main() {
var a int = 42
var b int = 13
sum := a + b
difference := a - b
product := a * b
quotient := a / b
remainder := a % b
fmt.Println("Sum:", sum)
fmt.Println("Difference:", difference)
fmt.Println("Product:", product)
fmt.Println("Quotient:", quotient)
fmt.Println("Remainder:", remainder)
}
该示例展示了整数的基本算术运算。当两个操作数都是整数时,Go 会执行整数除法,并丢弃任何余数。取模运算符 (%) 返回除法的余数。
整数类型转换
Go 要求在不同数字类型之间进行显式类型转换。此示例演示了 int 与其他数字类型之间的转换。package main
import (
"fmt"
"math"
)
func main() {
var i int = 42
var f float64 = float64(i)
var u uint = uint(math.Abs(float64(i)))
fmt.Printf("int: %d, float64: %f, uint: %d\n", i, f, u)
// Converting back to int
f = 3.14
i = int(f)
fmt.Println("Float to int:", i) // Truncates decimal part
}
该示例显示了 int、float64 和 uint 之间的转换。请注意,从浮点数转换为整数会截断小数部分,而不进行四舍五入。即使在兼容的数字类型之间,也需要进行显式转换。
整数溢出和下溢
Go 整数具有固定大小,可能会发生溢出或下溢。此示例演示了整数的限制和溢出行为。
package main
import (
"fmt"
"math"
)
func main() {
maxInt := math.MaxInt64
minInt := math.MinInt64
fmt.Println("Max int64:", maxInt)
fmt.Println("Min int64:", minInt)
// Overflow example
overflow := maxInt + 1
fmt.Println("Overflow result:", overflow) // Wraps around
// Underflow example
underflow := minInt - 1
fmt.Println("Underflow result:", underflow) // Wraps around
}
该示例展示了整数的限制和溢出行为。当整数溢出或下溢时,它会回绕到相反的极限。在算术运算中考虑这一点很重要,以防止出现意外结果。
整数的位运算
Go 为整数提供了全面的位运算。此示例演示了常见的位操作技术。
package main
import "fmt"
func main() {
var a int = 0b1100 // Binary literal (12 in decimal)
var b int = 0b1010 // Binary literal (10 in decimal)
fmt.Printf("a: %b (%d)\n", a, a)
fmt.Printf("b: %b (%d)\n", b, b)
// Bitwise operations
and := a & b
or := a | b
xor := a ^ b
shiftLeft := a << 2
shiftRight := a >> 1
fmt.Printf("AND: %b (%d)\n", and, and)
fmt.Printf("OR: %b (%d)\n", or, or)
fmt.Printf("XOR: %b (%d)\n", xor, xor)
fmt.Printf("Shift left: %b (%d)\n", shiftLeft, shiftLeft)
fmt.Printf("Shift right: %b (%d)\n", shiftRight, shiftRight)
}
该示例展示了各种位运算。Go 支持 AND、OR、XOR 和位移操作。二进制文字(0b 前缀)使代码中的位模式更易读。
整数解析和格式化
在编程中,字符串与整数之间的转换很常见。此示例演示了将字符串解析为整数以及格式化整数。
package main
import (
"fmt"
"strconv"
)
func main() {
// String to int
numStr := "42"
num, err := strconv.Atoi(numStr)
if err != nil {
fmt.Println("Conversion error:", err)
return
}
fmt.Println("Parsed number:", num)
// Int to string
result := strconv.Itoa(num * 2)
fmt.Println("Formatted result:", result)
// Parse with base
hexStr := "1a"
hexNum, err := strconv.ParseInt(hexStr, 16, 64)
if err != nil {
fmt.Println("Hex conversion error:", err)
return
}
fmt.Printf("Hex %s = %d\n", hexStr, hexNum)
}
该示例显示了带错误处理和不同进制的字符串到整数的转换。strconv 包提供了强大的函数,用于对整数进行解析和格式化,并进行适当的错误处理。
来源
本教程通过实际示例介绍了 Go 中的 int 类型,涵盖了算术运算、类型转换和位操作。