У меня есть 64-битные значения, которые я хочу сжать, используя тот факт, что только часть где-то посередине содержит данные, а до и после этого - нули.Самый эффективный способ кодирования 2 позиций между 0 и 64?
Скажем, что фактические данные имеют длину 1 бит и дополняются n 0s спереди и m 0s в конце, так что n + l + m = 64. Вместо передачи/хранения 64 бит я могу передавать l бит плюс все Мне нужно кодировать положение данных в 64-битном интервале.
Например, я сохраняю l, m и биты данных, затем я бы восстановил исходный 64-битный шаблон, прочитав l, прочитав l бит данных, прочитав m и сдвинув данные m бит влево ,
Наименьшая накладная плата, которую я мог бы придумать, - это два раза по 6 бит для хранения двух из l, n и m (каждый может быть между 0 и 64). Можно ли уменьшить это число?
10 бит - это служебные данные ... значение не более l + 10 бит. –
Правильно, я могу оставить 2 бита от полезной нагрузки, тоже, хорошо! И хороший момент для вывода битовой длины m из значения n. –
Если вы решили всегда кодировать нуль при n = 63, m = 1, то все «>» в приведенном выше может быть «> =», тем самым добавляя еще несколько экземпляров, где нужно отправить один бит. –