Упаковать несколько значений в один тип данных

Я заинтересован в создании класса для хранения данных в более пактном поместье, и я знаю, что могу с легкостью хранить числа от 0 до 2^(x)-1, наряду с логическими значениями, используя побитовые операторы, но меня интересует более нечетные числа, такие как максимум 6 или что-то. Я возился с этим в моей голове уже около недели и уже около часа гуглю, но я не могу найти ничего полезного.

Я ищу алгоритм или что-то, чтобы помочь мне понять, как лучше упаковать данные, которые находятся между 0 и случайным числом, которое между 1 и 32...

Я просто мозговой штурм по этому поводу и хотел бы также знать, следует ли даже рассматривать сжатие, как это. одна из причин, почему я смотрю на это, для огромных массивов и тому подобное. Извините, если это глупый вопрос, мой мозг не очень острый в последнее время.

Также пример максимальных значений: 1,5,8,3,12,19

Завершенный класс, о котором я думал, будет примерно таким:

public class MyObject{
  private long packed;
  ...
  public int getA(){...}
  public void setA(){...}
  public int getB(){...}
  public void setB(){...}

Спасибо за помощь, ~vzybilly~

1 ответ

Решение

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

Допустим, вам пришлось хранить последовательность номеров лотов в диапазоне 1-6. Вы можете поместить 12 из них в 32-разрядное целое число, например 6^12 < 2^32. Но теперь у вас есть дополнительная арифметика всякий раз, когда вы получаете доступ к данным, в основном видя, сколько 6^n есть в модуле входа 6^n+1. Это потому, что есть компромиссы в скорости и компактности для любого представления, которое вы используете. "Лучшее" на практике означает просто.

Нельзя сказать, что не бывает времени, когда экономия места бесплатна, хороша и элегантна, однако это проблема, которую должен задавать только тот, у кого уже есть навыки для ее решения, в ситуации, которая требует этого.

Другие вопросы по тегам