我想了解java.math.BigInteger.BigInteger(byte [] val)構造函數是如何工作的。Java BigInteger(byte [] val)
例如,當我從字節數組[1,0]創建一個BigInteger實例時,它創建的對應字符串是256.當然,二進制字符串10對應於基數爲10的值2。 10到256?我錯過了什麼?
我想了解java.math.BigInteger.BigInteger(byte [] val)構造函數是如何工作的。Java BigInteger(byte [] val)
例如,當我從字節數組[1,0]創建一個BigInteger實例時,它創建的對應字符串是256.當然,二進制字符串10對應於基數爲10的值2。 10到256?我錯過了什麼?
數組中的每個字節代表8位,所以[1, 0]
相當於1 * 2^(8 * 1) + 0 * 2^(8 * 0)
,或者,在二進制:00000001 00000000
。
請注意,BigInteger(byte [])構造函數也使用two's complement,所以它不僅僅是添加無符號數的問題:最重要的位會影響符號。
它有效地工作在base-256而不是base-2。所以輸入數組中的每個位置比下一個位置的值多256倍。
僞代碼:
x = 0;
for (i = 0; i < val.length - 1; i++) {
x = (x*256) + val[i];
}
什麼?那麼這不是說'10'值得'512'嗎? –
@Johan否,「10」表示1 * 256 + 0。 – Howard
@Johan:最後一個位置的單位是1.倒數第二個元素的單位是256.倒數第三個元素的單位是256 * 256。等等 –