请问如何得到int64的最大值?

karl_zhao · 2021-05-12 16:55:58 · 10772 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2021-05-12 16:55:58 的主题,其中的信息可能已经有所发展或是发生改变。

今天下一个测试程序,遇到下面这个问题: 本意是通过下面获得int64的最大值: int64(math.Exp2(float64(64-1))-1)

但是,数值的结果却是-9223372036854775808。

请大佬赐教一下。

谢谢!


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

10772 次点击  
加入收藏 微博
5 回复  |  直到 2021-05-26 17:46:04
karl_zhao
karl_zhao · #1 · 4年之前

已找到一种方式,就是通过63bit的uint64转成int64,但是不清楚为什么 int64(math.Exp2(float64(64-1))-1) 这样不行?是Exp2内置行数的bug么?

esverde
esverde · #2 · 4年之前

标准库里有math.MaxInt64,是1<<63 - 1,参见链接https://pkg.go.dev/math#MaxInt64

ivila
ivila · #3 · 4年之前
karl_zhaokarl_zhao #1 回复

已找到一种方式,就是通过63bit的uint64转成int64,但是不清楚为什么 int64(math.Exp2(float64(64-1))-1) 这样不行?是Exp2内置行数的bug么?

搞清楚几个问题就好 1,math.Exp2返回的值是什么类型的 2,float64二进制下是怎么表示的?float64是不是有精度考虑,精度到多少

slclub
slclub · #4 · 4年之前

二楼真理

去掉一位符号位,还省下63位

最大值是所有位都是1;

第一位1 为2的0次方 十进制 1 第二位1位2的1次方 十进制 2 。 。 。 第六十三位 是 2的62次方

这些所有的和就是 2的63次方 -1;这其实是一个求最大整数的公式

uint64 最大值,没有符号位,就是64位 2的64次方 -1

xfdbs
xfdbs · #5 · 4年之前
const (
    MaxInt8   = 1<<7 - 1
    MinInt8   = -1 << 7
    MaxInt16  = 1<<15 - 1
    MinInt16  = -1 << 15
    MaxInt32  = 1<<31 - 1
    MinInt32  = -1 << 31
    MaxInt64  = 1<<63 - 1
    MinInt64  = -1 << 63
    MaxUint8  = 1<<8 - 1
    MaxUint16 = 1<<16 - 1
    MaxUint32 = 1<<32 - 1
    MaxUint64 = 1<<64 - 1
)

这个是golang math包里的定义,也就是int64最大值可以直接用math.MaxInt64

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传