Какой тип данных можно использовать для хранения двоичного битового потока, длина которого превышает 64 бита?

Мне интересно, нужно ли назначать битовый поток из 78 бит переменной (позже для обработки), какой тип данных можно использовать? Какой максимальный бит можно сохранить в переменной в C?

, 👍0

Обсуждение

Как насчет массива ob bytes? также 78 не делится на 8. какой бы тип вы ни взяли, у вас будут дробные части., @Kwasmich

Но я все еще могу хранить 78 во всем, кратном 8. Это не проблема, остальные биты могут быть равны нулю., @floppy380

Будет ли в 64 можно хранить 64 бита? Как насчет того, чтобы назначить более 64 и менее 128 бит? Это невозможно?, @floppy380

FWIW, sizeof(intmax_t) == 8, по крайней мере, на платах на основе AVR., @Edgar Bonet

Вот класс шаблона, который обрабатывает это, https://github.com/mikaelpatel/Cosa/blob/master/cores/cosa/Cosa/BitSet.hh., @Mikael Patel


1 ответ


1

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

  • Если 78 бит — это одна "сущность" (например, одно действительно большое значение), вы можете сохранить ее в виде массива байтов (10 байт по 8 бит = 80 бит, оставив 2 бита неиспользованными).
  • Если 78 бит можно разделить на более мелкие части, вы можете:
    • Создайте структуру или класс, чтобы содержать вложенные элементы в поля (переменные экземпляра), используя для каждого подтипа обычный тип (например, 8, 16 или 32 бита со знаком/без знака).
    • Создайте битовые поля, чтобы сэкономить память, если есть небольшие элементы и проблема с объемом памяти.
    • Или комбинация вышеперечисленного

Если у вас много таких элементов и вы хотите сэкономить место (таким образом, 2 неиспользуемых бита из каждых 80 бит), вы можете создать большой массив, содержащий много элементов, и использовать битовые операции для получения каждого элемента. Например, первый элемент будет в первых 10 байтах, где последние 2 бита не являются частью элемента. Второй элемент будет использовать оставшиеся 2 бита и следующие 78–2 = 76 бит и т. д. Это сэкономит только 2/80 * 100% = 2,5 %, поэтому используйте это только тогда, когда это действительно необходимо.

,