Проблема в том, что мы не знаем, сколько это будет.Итак, мы кодируем длину с помощью унарного кодирования, которое мы рассмотрели вначале (двоеточия добавлены для ясности):
value binary coding
1 1:
2 01:0
3 01:1
4 001:00
5 001:01
16 00001:0000
64 0000001:000000
256 000000001:00000000
Этот метод на самом деле является нулем пола (log i), за которым следует 1, за которым следует двоичный кодкод без начального 1. Так как первая часть представляет собой унарный счет, для каждого бита во второй части есть один «0».Это означает, что мы можем чередовать биты данных с нулями, например:
value binary coding
1 1
2 001
3 011
4 00001
5 00011
16 000000001
64 0000000000001
256 00000000000000001
Это имеет ту же длину, но может быть реализовано с помощью простой процедуры сдвига (сборка: сдвиг влево, если перенос установлен, затем выход, иначе сдвиньте следующий бит в целое число, которое мы формируем).
Что такое этот сдвиг сборки и является ли он обратимым, то есть может ли 00000000000000001 вернуться к 00000000100000000 без дополнительных данных?