Привет Я хочу объявить 12-битную переменную в C или любую «нетрадиционную» переменную размера (переменная, которая не находится в порядке 2^n). как бы я это сделал. Я везде искал, и ничего не мог найти. Если это невозможно, как бы вы могли сохранить некоторые данные в своей собственной переменной.Как объявить переменные разного размера
ответ
Данные всегда хранятся в группах по байтам (по 8 бит).
В C переменные могут быть объявлены 1 байтом («char» или 8 бит), 2 байта («короткий» int на многих компьютерах - 16 бит) и 4 байта («длинный» int на многие компьютеры - 32 бита).
На более продвинутом уровне вы ищете «битфилды».
Смотреть это возможно: bitfield discussion
1) Байт не обязательно 8 бит. 2) C также не требует октетов. Символ 'char' является одним и тем же байтом s, но - см. 1 3). Целочисленные типы могут включать в себя биты заполнения, поэтому в принципе возможно использование' int' с 17 используемыми битами. Он может содержать или не содержать отступы, это зависит от ширины байта/'char'. – Olaf
О, пожалуйста !!!!!!! –
Если вы прокомментируете мой комментарий, используйте '@
Используйте битовое:
struct {
unsigned int twelve_bits: 12;
} wrapper;
В отличие от Ada, C не имеет возможности указать типы с ограниченным диапазоном значений. C зависит от предопределенных типов с реализацией определяются характеристиками, но с определенными гарантиями:
Типы
short
иint
гарантируется стандартом для хранения по меньшей мере, 16 бит, то вы можете использовать один для хранения ваших 12 битных значений, подписанный или неподписанный.Аналогичным образом, тип
long
будет содержать не менее 32 бит и типlong long
не менее 64 бит. Выберите тип, который достаточно велик для вашей цели.Типы
int8_t
,int16_t
,int32_t
,int64_t
и их беззнаковые аналоги, определенные в<stdint.h>
имеют более точную семантику, но не могут быть доступны на всех системах. Доступны типыint_least8_t
,int_least16_t
,int_least32_t
иint_least64_t
, а также аналогичные типыint_fastXX_t
, но они не используются очень часто, возможно потому, что имена несколько громоздки.Наконец, вы можете использовать бит-поля для любого количества бит от
1
до64
, но они доступны только как элементы структуры. битовые поля размером 1 должны быть объявлены какunsigned
.
Доступны 'intNleast_t' и' intNfast_t' и их неподписанные копии. – Olaf
@Olaf: Я отредактировал ответ для полноты, но эти имена явно не очень дружелюбны. – chqrlie
Согласны с их именами; они слишком длинны. Но все же они существуют. Во всяком случае, для меня неясно, что именно на самом деле OP хочет выполнить и что означает _declare_ здесь. Доступные переменные размеры можно найти очень легко. – Olaf
- 1. Порядок элементов разного размера структуры
- 2. Verilog массив векторов разного размера
- 3. массив массивов разного размера
- 4. Multiply массив разного размера
- 5. OpenCV Матрица разного размера
- 6. jtabbedpane вкладки разного размера
- 7. Входы разного размера bootstrap
- 8. Изготовление плитки разного размера
- 9. Эффективно маркеры разного размера
- 10. Заполнение макета разного размера
- 11. Flickr Json разного размера
- 12. Сравнение массивов разного размера
- 13. Может объявлены переменные внутри моей структуры быть разного размера
- 14. Как объявить глобальные переменные?
- 15. Как объявить переменные
- 16. Как объявить переменные
- 17. Android: Вызывающие изображения разного размера
- 18. Xcode раскадровка для разного размера
- 19. Обработка целых чисел разного размера
- 20. Смешивание звуковых файлов разного размера
- 21. выравнивание изображений разного размера внизу
- 22. FirefoxDriver делает скриншоты разного размера
- 23. Центрирование трех прямоугольников разного размера
- 24. dequeueReusableCellWithIdentifier с ячейками разного размера
- 25. Элементное умножение матриц разного размера
- 26. Упорядочить блоки div разного размера
- 27. JQuery плавающие коробки разного размера
- 28. Рисунок для разного размера FBO
- 29. Назначение разного размера std :: array
- 30. Круги разного размера с ggplot
Это немного слишком широким. Не могли бы вы указать, чего вы пытаетесь достичь? – Arc676
Один из способов - объявить 16-битную переменную и использовать только самые младшие 12 бит. – immibis
Что вы на самом деле пытаетесь выполнить, какова ваша более глубокая проблема? Это может быть проблема XY. – Olaf