Это зависит от того, почему вы это делаете.Обычно вы не можете использовать типы менее 8 бит, потому что это адресуемая единица для архитектуры.Однако вы можете использовать структуры для определения различной длины:
struct s {
unsigned int a : 4; // a is 4 bits
unsigned int b : 4; // b is 4 bits
unsigned int c : 16; // c is 16 bits
};
Однако нет гарантии, что структура будет иметь длину 24 бита.Кроме того, это может вызвать проблемы с порядком байтов.Там, где это возможно, лучше использовать системные независимые типы, такие как uint16_t и т. Д. Вы также можете использовать побитовые операторы и битовые сдвиги, чтобы очень специфично вертеть вещи.