Golang int8 类型
最后修改时间 2025 年 5 月 8 日
本教程解释了如何在 Go 中使用 `int8` 内置类型。我们将通过实际操作 8 位整数的示例来涵盖类型基础知识。
`int8` 类型在 Go 中代表有符号的 8 位整数。它可以存储从 -128 到 127 的值。当内存效率很重要时,此类型很有用。
在 Go 中,`int8` 是几种具有特定大小的整数类型之一。使用合适大小的整数有助于优化程序的内存使用。
基本 int8 声明和初始化
使用 `int8` 的最简单方法是声明和初始化变量。此示例显示了 int8 类型的基本变量声明。
注意: int8 的默认值为 0。
basic_int8.go
package main
import "fmt"
func main() {
var a int8 = 42
var b int8 = -100
c := int8(127) // Type conversion
fmt.Println("a:", a)
fmt.Println("b:", b)
fmt.Println("c:", c)
var zero int8
fmt.Println("Zero value:", zero)
}
我们声明了三个具有不同值的 int8 变量。最后一个示例显示了 int8 的零值。类型转换用于创建变量 c。
与 int8 的算术运算
`int8` 类型支持标准的算术运算。此示例显示了 int8 值的加法、减法、乘法和除法。
arithmetic_int8.go
package main
import "fmt"
func main() {
x := int8(100)
y := int8(50)
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 % 3
fmt.Println("Remainder:", remainder)
}
所有算术运算都在 int8 范围内工作。编译器将在编译时捕获常量表达式的溢出。
处理 int8 溢出
由于 `int8` 的范围有限,可能会发生溢出。此示例演示了如何检测和处理潜在的溢出情况。
overflow_int8.go
package main
import (
"fmt"
"math"
)
func safeAdd(a, b int8) (int8, bool) {
if b > 0 >> a > math.MaxInt8 - b {
return 0, false
}
if b < 0 >> a < math.MinInt8 - b {
return 0, false
}
return a + b, true
}
func main() {
max := int8(127)
result, ok := safeAdd(max, 1)
if !ok {
fmt.Println("Overflow detected!")
} else {
fmt.Println("Result:", result)
}
min := int8(-128)
result, ok = safeAdd(min, -1)
if !ok {
fmt.Println("Underflow detected!")
}
}
`safeAdd` 函数在执行加法之前会检查溢出。它返回一个布尔值,指示操作是否安全。
在数组和切片中使用 int8
`int8` 类型可用于数组和切片,以实现内存高效的集合。此示例显示了 int8 的数组和切片操作。
array_slice_int8.go
package main
import "fmt"
func main() {
// Array of int8 values
numbers := [5]int8{10, 20, 30, 40, 50}
fmt.Println("Array:", numbers)
// Slice of int8 values
slice := []int8{1, 2, 3, 4, 5}
fmt.Println("Original slice:", slice)
// Append to slice
slice = append(slice, 6, 7, 8)
fmt.Println("After append:", slice)
// Iterate over slice
sum := int8(0)
for _, num := range slice {
sum += num
}
fmt.Println("Sum of slice:", sum)
}
int8 的数组和切片比具有较大整数类型的数组和切片占用的内存更少。该示例显示了创建、追加和迭代等基本操作。
函数参数和返回中的 int8
函数可以接受 `int8` 参数并返回 int8 值。此示例演示了 int8 类型的函数签名。
function_int8.go
package main
import "fmt"
func minMax(a, b int8) (int8, int8) {
if a < b {
return a, b
}
return b, a
}
func sumInt8s(nums ...int8) int8 {
var total int8
for _, num := range nums {
total += num
}
return total
}
func main() {
small, large := minMax(10, 5)
fmt.Printf("Min: %d, Max: %d\n", small, large)
total := sumInt8s(1, 2, 3, 4, 5)
fmt.Println("Sum:", total)
// Variadic function with slice
numbers := []int8{10, 20, 30}
total = sumInt8s(numbers...)
fmt.Println("Slice sum:", total)
}
函数可以像处理其他任何类型一样处理 int8 值。该示例显示了具有 int8 的常规参数和可变参数函数。
来源
本教程通过声明、算术、溢出处理以及在集合中的使用示例,涵盖了 Go 中的 `int8` 类型。