今天下一个测试程序,遇到下面这个问题: 本意是通过下面获得int64的最大值: int64(math.Exp2(float64(64-1))-1)
但是,数值的结果却是-9223372036854775808。
请大佬赐教一下。
谢谢!
有疑问加站长微信联系(非本文作者)

今天下一个测试程序,遇到下面这个问题: 本意是通过下面获得int64的最大值: int64(math.Exp2(float64(64-1))-1)
但是,数值的结果却是-9223372036854775808。
请大佬赐教一下。
谢谢!
有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
`单行代码`
已找到一种方式,就是通过63bit的uint64转成int64,但是不清楚为什么 int64(math.Exp2(float64(64-1))-1) 这样不行?是Exp2内置行数的bug么?
标准库里有math.MaxInt64,是1<<63 - 1,参见链接https://pkg.go.dev/math#MaxInt64
搞清楚几个问题就好 1,math.Exp2返回的值是什么类型的 2,float64二进制下是怎么表示的?float64是不是有精度考虑,精度到多少
二楼真理
去掉一位符号位,还省下63位
最大值是所有位都是1;
第一位1 为2的0次方 十进制 1 第二位1位2的1次方 十进制 2 。 。 。 第六十三位 是 2的62次方
这些所有的和就是 2的63次方 -1;这其实是一个求最大整数的公式
uint64 最大值,没有符号位,就是64位 2的64次方 -1
这个是golang math包里的定义,也就是int64最大值可以直接用math.MaxInt64