2012-06-23 1 views
4

Я создал следующий код работает с Java:BitSet показывает значения назад?

BitSet bitSet = BitSet.valueOf(new byte[] { (byte)15 }); 
System.out.println(bitSet); 

который к моему удивлению гравюр

{0, 1, 2, 3} //the indexes of the 1's in the bitset 

вместо

{ 4, 5, 6, 7 }. 

15 в дополнение до 2 записывается в виде 00001111 (с 1 байт), если я не ошибаюсь.

Это заставляет меня задаться вопросом, почему бы BitSet показать индексы назад. Есть ли разумное объяснение?

+0

'15' является' 2^0 + 2^1 + 2^2 + 2^3'. * Вы * читаете биты назад, а не 'BitSet'. –

ответ

5

Цитируя стандарта Java для BitSet:

Возвращает строковое представление этого набора бит. Для каждого индекса для , который этот битсет содержит бит в заданном состоянии, в результат входит десятичное представление этого индекса. Такие индексы перечислены в порядке убывания наименьшего значения в наименовании «,» (запятая и пробел) и окружены фигурными скобками, что приводит к математическому обозначению для набора целых чисел.

Как говорится, порядок «от самого низкого до высшего». Это означает наименее значимый бит (один бит), а самый старший бит - последний.

Любой заказ (обозначение порядка слева направо или числовой порядок наименьший по значению) имел бы смысл, хотя и по-другому.

+1

Отсюда 2^0 + 2^1 + 2^2 + 2^3 = 15. –