Наименьшая единица, адресуемая в C, всегда является байтом (называемым char
в C). Вы не можете получить доступ напрямую. Самый близкий способ получить доступ к битам - это определить тип данных, называемый bitpointer
, и определить для него некоторые функции или макросы:
#include <stdbool.h>
typedef struct bitpointer {
unsigned char *pb; /* pointer to the byte */
unsigned int bit; /* bit number inside the byte */
} bitpointer;
static inline bool bitpointer_isset(const bitpointer *bp) {
return (bp->pb & (1 << bp->bit)) != 0;
}
static inline void bitpointer_set(const bitpointer *bp, bool value) {
unsigned char shifted = (value ? 1 : 0) << bp->bit;
unsigned char cleared = *bp->pb &~ (1 << bp->bit);
*(bp->pb) = cleared | shifted;
}
Я рекомендую против союзов, потому что это , будут ли они заполнены msb-to-lsb или lsb-to-msb (см. ISO C99, 6.7.2.1p10).