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

Rea*_*ed. 13 java types

我正在寻找一个精确容量为0到2 ^ 64的数据类型 - 1.我们知道Java不支持'unsigned'禁止char数据类型.

BigInteger类允许创建长数据类型不支持的更大数字.但我不确定BigInteger课程将如何满足我的目的.BigInteger类只允许通过构造函数进行赋值.我看到以下可能性,但它会生成一个随机数.

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

我看不到任何setValue(x)类型的API,它允许我为这个BigInteger选择我自己的值.如何使用BigInteger类实现这个或者还有其他方法吗?请发布代码示例.

PS:这里有人发布的问题没有实施细节.

sta*_*lue 6

您通常可以使用Java的带符号数字数据类型,就像它们是未签名的一样.

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


unw*_*ind 1

正如您所发现的,BigInteger是不可变的。您可能想要研究 BigInteger 的子类化,并编写自己的构造函数来验证输入,并在相关范围内发出正的 BigInteger。

为了维持数字仅使用 64 位的要求,您可能还需要重载各种操作,因此它们限制结果并返回新类的实例而不是新的 BigInteger。

这可能是一项相当大的工作,但仍然比从头开始要好得多。