2011-06-26 75 views
1

我想了解java.math.BigInteger.BigInteger(byte [] val)構造函數是如何工作的。Java BigInteger(byte [] val)

例如,當我從字節數組[1,0]創建一個BigInteger實例時,它創建的對應字符串是256.當然,二進制字符串10對應於基數爲10的值2。 10到256?我錯過了什麼?

回答

4

數組中的每個字節代表8位,所以[1, 0]相當於1 * 2^(8 * 1) + 0 * 2^(8 * 0),或者,在二進制:00000001 00000000

請注意,BigInteger(byte [])構造函數也使用two's complement,所以它不僅僅是添加無符號數的問題:最重要的位會影響符號。

4

它有效地工作在base-256而不是base-2。所以輸入數組中的每個位置比下一個位置的值多256倍。

僞代碼:

x = 0; 
for (i = 0; i < val.length - 1; i++) { 
    x = (x*256) + val[i]; 
} 
+0

什麼?那麼這不是說'10'值得'512'嗎? –

+0

@Johan否,「10」表示1 * 256 + 0。 – Howard

+0

@Johan:最後一個位置的單位是1.倒數第二個元素的單位是256.倒數第三個元素的單位是256 * 256。等等 –