我试图了解java.math.BigInteger.BigInteger(byte [] val)构造函数是如何工作的。
例如,当我从字节数组[1,0]创建BigInteger实例时,它创建的相应字符串是256.当然,二进制字符串10对应于基数10中的值2.如何将其从10转换为10到256?我错过了什么?
答案 0 :(得分:4)
它有效地工作在base-256,而不是base-2。因此,输入数组中的每个位置比下一个位置的值高256倍。
的伪代码:
x = 0;
for (i = 0; i < val.length - 1; i++) {
x = (x*256) + val[i];
}
答案 1 :(得分:4)
数组中的每个字节代表8位,因此[1, 0]
相当于1 * 2^(8 * 1) + 0 * 2^(8 * 0)
,或者二进制:00000001 00000000
。
请注意BigInteger(byte [])构造函数也使用two's complement,因此不只是添加无符号数:最重要的位会影响符号。