You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将无符号long转换为BigInteger的最简方法是什么?

Java无符号long类型的处理技巧

Java本身确实没有提供无符号的long类型,但有意思的是,如果你把long当作无符号类型来做乘法运算,它是可以正常工作的。不过在进行比较操作时,得用Long.compareUnsigned()方法才能得到符合无符号逻辑的结果。

这里有个很容易踩的坑:当long值溢出后,想用BigInteger来表示它的无符号数值时,直接用BigInteger.valueOf(v)会得到错误的结果。比如这段代码:

long v = Long.MAX_VALUE; // 注:实际Long.MAX_VALUE是2^63-1,此处按示例标注
v = v + 1;
BigInteger vv = BigInteger.valueOf(v);
System.out.println(vv); // 输出-1

这是因为Long.MAX_VALUE + 1在有符号long中会溢出成-1,BigInteger.valueOf()会直接把这个有符号负数转换进去,自然就得不到我们想要的无符号数值了。

我试过几种方法,唯一可行的是先通过Long.toUnsignedString()把溢出后的long转换成无符号字符串,再用这个字符串初始化BigInteger,这样就能得到正确的无符号数值:

long v = Long.MAX_VALUE; // 注:实际Long.MAX_VALUE是2^63-1,此处按示例标注
v = v + 1;
BigInteger vv = new BigInteger(Long.toUnsignedString(v));
System.out.println(vv); // 输出正确的无符号数值(即2^63)

内容的提问来源于stack exchange,提问作者Poperton

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.01 00:42:44