如何在Go语言中使用2's complement算术获取int64最大值(不使用math包)
不借助math.MaxInt64比较int64数值与最大值的方案
两种不依赖math包的int64最大值构造方法:
- 位运算构造:
^int64(0) >> 1- 原理:
^int64(0)会生成所有二进制位都是1的int64值(按位取反0的所有位),对其做算术右移1位后,最高位的符号位被填充为0,其余位保持1,正好是int64的最大值。
- 原理:
- 直接使用十六进制常量:
int64(0x7FFFFFFFFFFFFFFF)- 原理:这是int64最大值的标准十六进制表示,直接写常量即可,完全无需依赖外部包。
- 位运算构造:
示例代码:
package main import "fmt" func main() { testNum := int64(9223372036854775807) // 待比较的int64数值 // 用位运算构造最大值并比较 max1 := ^int64(0) >> 1 if testNum == max1 { fmt.Println("testNum等于int64最大值(位运算构造)") } // 用十六进制常量构造最大值并比较 max2 := int64(0x7FFFFFFFFFFFFFFF) if testNum == max2 { fmt.Println("testNum等于int64最大值(十六进制常量)") } }
这两种方案的逻辑和int类型的位运算构造思路一致,都能满足不使用math包的需求。
内容的提问来源于stack exchange,提问作者Nikita
相关产品推荐
相关产品推荐

