Как создать новый тип с пользовательскими байтами в C? - PullRequest
0 голосов
/ 06 сентября 2018

Можно ли создать новый тип в C, который использует количество байтов, которое я решу? Я знаю, что int занимает 4 байта, но мне нужно работать с очень маленькими числами, поэтому выделение 4 байтов с помощью malloc для каждого int - пустая трата, я думал о создании нового типа для чисел, который занимает всего 1 байт. ..если это возможно

Ответы [ 5 ]

0 голосов
/ 06 сентября 2018

Тип байта уже завершен, он называется char и sizeof(char)=1, так что строго говоря о типах данных, char - это наименьший объем памяти, которым вы можете управлять, хотя C.

Однако, если вы говорите о битах, это не означает, что тип char всегда равен 8 битам (обычно это байт 10 или 16 бит в DSP). Учитывая, что количество битов в char обозначено CHAR_BIT.

0 голосов
/ 06 сентября 2018

Вы можете использовать следующие структуры для байтов и битов соответственно.

 typedef struct data_type_bytes {
        unsigned char data;
 } bytes;

typedef struct data_type_bits{
   unsigned int heightValidated : 1;
} bits;
0 голосов
/ 06 сентября 2018

Можно ли создать новый тип в C, который использует количество байтов, которое я решу?

Да, вы можете объявить массив из char (или signed char или unsigned char) любой положительной длины, которая вам нравится, вплоть до зависящего от реализации (но обычно большого) предела.

Я знаю, что int занимает 4 байта,

Вы ошибаетесь: int может занимать четыре байта, но стандарт не требует этого. Его минимальный требуемый диапазон может быть представлен только двумя байтами, а некоторые реализации действительно предоставляют двухбайтовые int с. Это было более распространено исторически, чем сегодня. Кроме того, реализация может сделать int больше , чем четыре байта. Это редко по умолчанию, но некоторые компиляторы предоставляют возможность получить такой результат.

но мне нужно работать с очень маленькими числами, поэтому выделение 4 байтов с помощью malloc для каждого int - это пустая трата времени, я думал о создании нового типа для чисел, который занимает всего 1 байт ... если это возможно.

Однобайтовое число - это signed char или unsigned char. Технически, простой char также подходит, но его подпись определяется реализацией, и в качестве стиля предпочтительнее резервировать его использование для символьных данных. Кроме того, технически, char и его варианты со знаком и без знака могут быть больше, чем 8 бит, но вы вряд ли когда-либо столкнетесь с реализацией C, где это так, и C в любом случае предлагает не меньший тип данных.

0 голосов
/ 06 сентября 2018

Строго говоря, int имеет по крайней мере 2 байта в соответствии со стандартом C, а фактическая ширина типа зависит от машины. Если вам нужны числовые типы с определенной шириной, я предлагаю вам взглянуть на те, которые определены в <stdint.h>.

Если вы действительно хотите использовать тип с, скажем, N байтами, вы можете использовать char small_numbers[N] и немного запачкать руки, но более практичным решением будет просто использовать встроенные типы.

0 голосов
/ 06 сентября 2018

Вы можете просто использовать char вместо int

Или вы можете создать structure, это наиболее часто используемый тип данных в C. Например:

struct customStructure {
    char c;
};
...