首页 > 解决方案 > 将无符号长整数转换为 BigInteger 的最简单方法是什么

问题描述

Java 不支持无符号长整数,但如果您将长整数视为无符号并进行乘法运算,它就可以正常工作。为了比较,您可以使用Long.compareUnsigned().

当我做

long v = Long.MAX_VALUE; //2^63
v = v+1;
BigInteger vv = BigInteger.valueOf(v);
System.out.println(vv);//this prints -1

我发现的唯一方法是做

long v = Long.MAX_VALUE; //2^63
v = v+1;
BigInteger vv = new BigInteger(Long.toUnsignedString(v));
System.out.println(vv);//this prints 2^63+1

标签: java

解决方案


利用您对 2 的补码运算如何工作的知识,您可以执行以下操作:

private final BigInteger TWO_POW_64 = BigInteger.TWO.pow(64);
...

Long v = <some negative value to be treated as unsigned>;
BigInteger b = BigInteger.valueOf(v).mod(TWO_POW_64);

推荐阅读