Java BigInteger (byte [] val) - PullRequest
       25

Java BigInteger (byte [] val)

1 голос
/ 26 июня 2011

Я пытаюсь понять, как работает конструктор java.math.BigInteger.BigInteger (byte [] val).

Например, когда я создаю экземпляр BigInteger из байтового массива [1, 0], соответствующая строка, которую он создает, равна 256. Конечно, двоичная строка 10 соответствует значению 2 в базе 10. Как она преобразуетсяэто от 10 до 256?Чего мне не хватает?

Ответы [ 2 ]

4 голосов
/ 26 июня 2011

Каждый байт в массиве представляет 8 битов, поэтому [1, 0] эквивалентно 1 * 2^(8 * 1) + 0 * 2^(8 * 0) или, в двоичном виде: 00000001 00000000.

Остерегайтесь того, что конструктор BigInteger (byte []) также использует дополняют два , так что дело не только в добавлении чисел без знака: старший знак будет влиять на знак.

4 голосов
/ 26 июня 2011

Это эффективно работает в base-256, а не в base-2. Таким образом, каждая позиция во входном массиве стоит в 256 раз больше, чем следующая позиция.

Псевдо-код:

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