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` 类型。