Java:实现无符号128位整数

Java:实现无符号128位整数,java,integer,implementation,Java,Integer,Implementation,首先,我应该问: 有人知道目前的128b UINT Java实现吗? 我需要一些东西来保持自然的基本价值观。ie:一个巨大的柜台。 我知道大整数,它速度慢且不可变。128b的UINT是有意义的 我在考虑使用一对原始long实现一个OWORD 溢出将引发异常,而不是环绕 我应该寻找什么样的源代码/博客来实现这个类的工作?为什么不使用BigInteger?我会使用32位整数作为表示,因为需要更大的类型(long)来获得进位、溢出检测和乘法的额外精度。把一个32位整数想象成一个数字,然后应用小学的算法

首先,我应该问:
有人知道目前的128b UINT Java实现吗?

我需要一些东西来保持自然的基本价值观。ie:一个巨大的柜台。
我知道大整数,它速度慢且不可变。128b的UINT是有意义的

我在考虑使用一对原始long实现一个OWORD

溢出将引发异常,而不是环绕


我应该寻找什么样的源代码/博客来实现这个类的工作?

为什么不使用BigInteger?

我会使用32位整数作为表示,因为需要更大的类型(long)来获得进位、溢出检测和乘法的额外精度。把一个32位整数想象成一个数字,然后应用小学的算法。

不要告诉我你计划有128个静态setter和getter,每个位一个???我最终选择setBit(int-index,boolean-value)和getBit(int-index)作为实例方法

您还需要更多的东西:一个toString()方法,这样您就可以得到一个可读的表示(我想,在某个时候您可能会想要打印数字)


请记住,java中的所有序号类型都是有符号的(char除外),因此如果您计划使用两个long,请始终记住,下半部分在检测溢出等方面可能会有问题。。。无论如何,您将有一个127位的数字,除非因为较低的部分将被视为63位无符号。

BigInteger在您只需要64位多一点的情况下速度很慢。。一年前遇到这个问题,结果比原来的long慢25倍。查看此答案了解详细信息:奇怪的是,这是公认的答案,考虑到OP说他不想要BigInteger。Tim,你的评论包含一个断开的链接。一年前实现了类似的功能,我只能说:我当然希望你不必实现精确的模/除…;)您可以从OpenJDK获取MutableBigInteger,OP在哪里甚至为每个位提示了setter?在批评之前你应该先看一看。好的,现在我明白了。我没想到我必须阅读一个问题的修订才能理解它;这似乎有点过头了。我已经解开了你的答案。我不想理解它,但不要期望每次问题更新时人们都会回来更改他们的答案(除其他外,因为它没有通知)…你可以使用64位的长字符串,很好==>快一倍。进位可以通过改变符号位来确定。@Ira Baxter我怀疑它会更快。这对于加法是可能的,但对于乘法则更为复杂。Java BigInteger使用int[],我想他们知道自己在做什么。如果你想要一个非常高性能的BigInt包,你可以使用机器上最大的字数,这是本机指令支持的。现在很难找到一台不是64位的电脑。我坚持我的立场:使用一个长的。BigInt包中的算法可能是大多数多精度包的典型算法;长线应该相对容易落到位。现在,添加大整数只需要一半的周期。乘法的速度应该是4倍,因为你只需要1个乘积而不是4个半宽的叉积。我可以稍微缓和一下:你需要最大的一组位,你可以从两个单精度乘法中得到一个双精度乘积。Java int cast as long以独立于Java的方式满足了这一点,这在某种程度上证明了您的答案。如果您需要速度,您将使用本机代码。在x86上,FP单元提供最低80位精度,这意味着您可能需要选择40位“数字”。