如何使用 BigInteger 类在 Java 中实现无符号的 64 位 int?

2022-09-04 20:17:28

我正在寻找一种数据类型,其确切容量为0到2 ^ 64 - 1。我们知道Java不支持“无符号”,除非字符数据类型。

有一个 BigInteger 类,它允许创建长数据类型无法支持的较大数字。但我不确定BigInteger类将如何达到我的目的。BigInteger 类仅允许通过构造函数进行赋值。我看到以下可能性,但它会产生一个随机数。

BigInteger(int numBits, Random rnd) 
Constructs a randomly generated BigInteger, uniformly distributed over the range 0 to (2^numBits - 1), inclusive.

我看不到任何setValue(x)类型的API,可以让我选择自己的值给这个BigInteger。如何使用BigInteger类来实现这一点,或者有没有其他方法可以做到这一点?请发布代码示例。

PS:有人在这里发布的问题没有实现细节。


答案 1

您通常可以使用 Java 的有符号数字数据类型,就好像它们是无符号一样。

请参阅有关Java中已签名与未签名的旧答案


答案 2

为什么不写你自己的包装器,下面用一个签名长。如果用户希望将无符号值作为 BigInteger 获取 - 测试符号并将 2^64 添加到 BigInteger。