Возвращает минимальное дополняющее два (1
), исключая знаковый бит, что в данном случае равно 0. Двоичное значение -1 равно 0xFFFF...
/ 0b1111...
, с дополнением к одному (max - value), равным 0
, которое добавляет к 1
, чтобы стать дополнением к двум (дополнение к одному + 1).
Однако переменная n
из #bitLength
- это не значение вашего BigInteger, а значение сохраненного поля bitLength минус 1 (а 0
означает, что оно еще не рассчитано). Таким образом, BigInteger
со значением -1
, возвращающим 0
из #bitLength
, является совпадением по отношению к ним, использующим -1 в качестве часового значения.
Они используют это значение для обозначения того, что поле еще не было лениво инициализировано , а затем для поля bitLength
установлено правильное значение (0). Помните, что BigInteger
является неизменным, поэтому при вычислении bitLength он никогда не изменится для этого экземпляра.