检测 Go 中的整数溢出
当算术运算的结果超过数据类型可表示的最大值或最小值时,就会发生整数溢出。在 Go 中,整数使用有符号或无符号整数表示,其中最常见的是 32 位和 64 位。
要检测整数溢出,“正确”的方法是将结果与最大值或最小值进行比较数据类型的最小值。例如,对于 32 位加法,如果两个正整数之和超过最大值(2^31 - 1)或两个负整数之和小于最小值(-2^31),就会发生溢出。
考虑以下代码:
a, b := 2147483647, 2147483647 // 32-bit integers c := a + b
要检查 c 是否溢出,我们可以将其与最大 32 位整数进行比较:
if c > math.MaxInt32 { // Integer overflow occurred }
类似地,对于64 位加法,如果两个正整数之和超过最大值(2^63 - 1)或两个负整数之和小于最小值(-2^63),就会发生溢出。检查将是:
if c > math.MaxInt64 { // Integer overflow occurred }
另一种方法是使用自定义错误处理。我们可以定义一个错误变量,如果没有溢出则将其设置为nil:
var errOverflow error if right > 0 { if left > math.MaxInt32-right { errOverflow = errors.New("integer overflow") } } else { if left < math.MinInt32-right { errOverflow = errors.New("integer overflow") } }
然后,我们可以在操作后检查错误变量:
if errOverflow != nil { // Integer overflow occurred }
以上是如何检测 Go 中的整数溢出?的详细内容。更多信息请关注PHP中文网其他相关文章!