Итак, вы хотите хранить биты в памяти и читать их обратно, не зная, сколько они стоят. Это невозможно. (Это невозможно и с байтами)
Представьте, если бы вы могли это сделать. Затем мы можем сжать файл, например, сказав, что «0» сжимает до «0», а «1» сжимает до «00». После этого «сжатия» (которое на самом деле увеличило бы размер файла) у нас есть файл только с 0. Затем мы сжимаем файл только с 0, записывая, сколько существует 0. Удивительно! Любой файл 2 ГБ сжимается до 4 байтов. Но мы знаем, что невозможно сжать каждый файл размером 2 ГБ в 4 байта. Так что с этой идеей что-то не так.
Вы можете прочитать несколько бит из памяти, но вам нужно знать, сколько вы читаете. Вы также можете сделать это, если вы не знаете, сколько бит вы читаете, но комбинации не "перекрываются". Таким образом, если «01» является допустимой комбинацией, то вы не можете иметь «010», потому что это будет перекрывать «01». Но вы могли бы иметь «001». Это называется код префикса и используется в кодировании Хаффмана , типе сжатия.
Конечно, вы также можете сохранить длину перед каждым числом. Таким образом, вы можете сохранить «0» как «0010», где «001» означает, сколько битов длинное число. С длиной 3-ди git вы можете иметь только до 7-битных чисел. Или 8-битные числа, если вычесть 1 из длины, и в этом случае вы не можете иметь нулевые биты. (поэтому «0» становится «0000», «101» становится «010101» и т. д. c)