Как указано в Javadoc :
Вычисления (ceil(log2(this < 0 ? -this : this+1)))
.
Поскольку this >= 0
, он вычисляет ceil(log2(1))
, log_anything(1) == 0
и ceil(0) == 0
.
Вы спрашиваете в комментарии"как тогда представлен ноль :( Это должно потребовать чего-то глубоко в памяти".
A BigInteger
, представляющий ноль, явно имеет некоторое представление в памяти. Но вы можете думать об этом как о массиве некоторого условного типа, bit
, то есть bit[]
. Ноль может быть представлен массивом нулевой длины new bit[]{}
(но также может быть new bit[]{0}
, new bit[]{0, 0}
и т. Д.).
Для массива нормально иметь нулевую длину в Java (в спецификации он называется пустой массив ). Такой массив имеет нулевые элементы, но он имеет ненулевой размер в памяти, потому что ему нужно где-то хранить длину массива (и другие вещи для домашнего хозяйства).
bitLength()
- это минимальная длина этого массива. Нулевая длина не означает, что массив не занимает места в памяти, просто его элементы не занимают дополнительного пространства.