2016-07-01 2 views
1

Я пытаюсь использовать подписанный long как массив из 1s и 0s. Мне нужно уметь назначать любой бит длинным или читать какой-либо бит за долгое время. Я продолжаю застревать, потому что я не могу читать или записывать бит знака, не испорчая остальные биты (из-за двух-дополнений). Я мог бы использовать логический массив для представления 1s и 0s, но это занимает слишком много памяти. Кто-нибудь знает способ индивидуального чтения и записи на любой бит в течение долгого времени? Или может кто-нибудь предложить эффективную альтернативу памяти?Чтение/запись бит длинного

+3

Вы должны быть более конкретной информацией о трудности вы имеете. Для эффективной альтернативы посмотрите на ['BitSet'] на Java (https://docs.oracle.com/javase/7/docs/api/java/util/BitSet.html). – shmosel

+0

Используйте класс бит-набора, как это предложено в предыдущих комментариях –

+0

Чтение/запись знакового бита абсолютно нормально, оно ничего не испортит. Дополнение второго не имеет значения. Конечно, вы должны ожидать, что значение будет напечатано как отрицательное, если вы установите знак, но это не влияет на фактические биты. – harold

ответ

1

Для этой проблемы BitSet является соответствующим классом библиотеки. Внутри он реализуется с использованием длинного и, если требуется, возрастает до использования BigInteger. Для получения дополнительной информации прочитайте javadoc.

Некоторые примеры кода в online java ide, демонстрирующие использование BitSet.

https://www.codiva.io/p/f6f0ee80-2ad3-4fb6-a197-aa1e549fba80

Смежные вопросы