Какой тип данных можно использовать для хранения двоичного битового потока, длина которого превышает 64 бита?
Мне интересно, нужно ли назначать битовый поток из 78 бит переменной (позже для обработки), какой тип данных можно использовать? Какой максимальный бит можно сохранить в переменной в C?
@floppy380, 👍0
Обсуждение1 ответ
Нет встроенного типа данных, который может хранить 78 бит. Однако это немного зависит от того, что вы хотите хранить. Например, в следующих случаях:
- Если 78 бит — это одна "сущность" (например, одно действительно большое значение), вы можете сохранить ее в виде массива байтов (10 байт по 8 бит = 80 бит, оставив 2 бита неиспользованными).
- Если 78 бит можно разделить на более мелкие части, вы можете:
- Создайте структуру или класс, чтобы содержать вложенные элементы в поля (переменные экземпляра), используя для каждого подтипа обычный тип (например, 8, 16 или 32 бита со знаком/без знака).
- Создайте битовые поля, чтобы сэкономить память, если есть небольшие элементы и проблема с объемом памяти.
- Или комбинация вышеперечисленного
Если у вас много таких элементов и вы хотите сэкономить место (таким образом, 2 неиспользуемых бита из каждых 80 бит), вы можете создать большой массив, содержащий много элементов, и использовать битовые операции для получения каждого элемента. Например, первый элемент будет в первых 10 байтах, где последние 2 бита не являются частью элемента. Второй элемент будет использовать оставшиеся 2 бита и следующие 78–2 = 76 бит и т. д. Это сэкономит только 2/80 * 100% = 2,5 %, поэтому используйте это только тогда, когда это действительно необходимо.
- Поскольку double и float представляют один и тот же тип данных (обычно), что предпочтительнее?
- Умножение, деление. Что не так?
- cast double to long приводит к неожиданным результатам
- Преобразование int или float в массив байтов в ардуино
- Как объявить массив переменного размера (глобально)
- Программирование Arduino с использованием Python, а не C/C ++
- Загрузка Arduino Nano дает ошибку: avrdude: stk500_recv(): programmer is not responding
- Как справиться с rollover millis()?
Как насчет массива 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