2009-07-08 87 views
10

首先,我要問:
有誰當前的實施128B UINT的Java知道?的Java:實現一個無符號整數128位

我需要一些東西來保持自然的基數值。即:一個巨大的櫃檯。
我知道BigIntegers,它很慢且不可變。一個128b UINT是有道理的...

我在考慮實現一個OWORD,使用一對原始的longs。

溢出會拋出異常而不是包裹。

爲了實現這個類的工作,我應該看一下什麼樣的sourcecode/blog?

+0

一年前實現了類似的東西,我只能說:我當然希望你不必執行準確的模/劃分...;) – Tim 2009-07-08 09:12:24

+2

你可以從OpenJDK抓取MutableBigInteger http://www.docjar.org /html/api/java/math/MutableBigInteger.java.html – akarnokd 2009-07-08 13:26:48

回答

0

爲什麼不使用BigInteger?

+10

BigInteger是_slow_,當你需要的只是一點點超過64位..在一年前遇到這個問題,結果是比原來的長度慢25倍。看到這個詳細信息:http://stackoverflow.com/questions/962747/most-shameful-awesome-language-hack/1084538#1084538 – Tim 2009-07-08 09:07:14

+9

奇怪,這是公認的答案,考慮到OP說他不想BigInteger 。 – 2009-09-01 22:02:27

4

我會使用32位整數作爲表示,因爲您需要更大的類型(long)來獲得進位位,溢出檢測和乘法的額外精度。將32位整數看作一個數字並應用小學的算法。

3

不要告訴我,你打算有128靜態setters和getters,每一個位?我明確地將setBit(int index,boolean value)和getBit(int index)作爲實例方法。

你需要的更多東西:一個toString()方法,這樣你可以得到一個人類可讀的表示(在某些時候,你會想要打印數字,我認爲)。

請記住,所有在java中的序數類型都被簽名(char除外),所以如果你打算使用兩個long,請記住下面的部分可能會有問題檢測溢出等。無論如何,你將有一個127位的數字,除非因爲下半部分將被視爲63位無符號數。

相關問題