Установить BitSet как примитивный тип? - PullRequest
1 голос
/ 18 апреля 2011

В Java, вы можете создать BitSet размером 8 и сохранить его как байт для его вывода? Документация по BitSets не упоминает об этом. Это значит нет?

Ответы [ 4 ]

5 голосов
/ 18 апреля 2011

Вы не можете привести BitSet к byte.

Вы можете написать код, чтобы делать то, что вы хотите.Получив BitSet с именем bits, вы идете:

byte output = 0;
for (int i = 0; i < 8; i++) {
    if (bits.get(i)) {
        output |= 1 << (7 - i);
    }
}

Обновление : Приведенный выше код предполагает, что ваши биты проиндексированы от 0 до 7 слева направо.Например, предполагая биты 01101001, вы рассматриваете бит 0 как крайний левый 0. Если, однако, вы назначаете биты справа налево, то бит 0 будет самым правым 1. В этом случае вместо output |= 1 << i.

2 голосов
/ 18 апреля 2011

Для этого ничего не встроено.Вы могли бы реализовать это самостоятельно, очевидно.

0 голосов
/ 18 апреля 2011

Класс BitSet, очевидно, не предназначен для экспорта или импорта своих битов в собственные типы данных и также довольно тяжелый, если вы просто хотите иметь дело с фиксированным размером одного байта. Таким образом, это может быть не то, что вам нужно, если вы просто хотите независимо обрабатывать биты байта, а затем использовать полученный байт. Кажется, вы можете просто захотеть использовать такой API:

SimpleBitSet bs = new SimpleBitSet( 'A' );
bs.setBit( 5 );
byte mybyte = bs.getByte();

Таким образом, реализация такого упрощенного набора битов может выглядеть так:

public class SimpleBitSet
{
    private byte bits;

    public SimpleBitSet( int bits )
    {
        this.bits = (byte) bits;
    }

    public byte getByte()
    {
        return bits;
    }

    public boolean getBit( int idx )
    {
        checkIndex( idx );
        return ( bits & ( 1 << idx ) ) != 0;
    }

    public void setBit( int idx )
    {
        checkIndex( idx );
        bits |= 1 << idx;
    }

    public void clearBit( int idx )
    {
        checkIndex( idx );
        bits &= ~( 1 << idx );
    }

    protected void checkIndex( int idx )
    {
        if( idx < 0 || idx > 7 )
            throw new IllegalArgumentException( "index: " + idx );
    }    
}
0 голосов
/ 18 апреля 2011

бит установлен массив битов

JVM использует ячейку 32-битного стека, т.е. каждый регистр в JVM хранит один 32-битный адрес

мы знаем, что примитивное логическое значение установлено в 1 бит, но обрабатывается как 32 бита. массив логических значений будет считаться массивом байтов

в BitSet каждый компонент набора битов имеет логическое значение

Каждый установленный бит имеет текущий размер, который является количеством битов пространства в настоящее время используется установленным битом. Заметка что размер связан с реализация набора битов, так что может изменить с реализацией. Длина набора битов относится к логической длине бит установлен и определен независимо от реализации.

...