c-bit-fields
Table of Contents
C bit fields
C bit fields pack individual bits into struct members, saving memory when many boolean or small-range fields are needed. Declare with unsigned type : nbits to allocate exactly N bits for the field.
Use bit fields for hardware registers, flags, or tight memory constraints.
Example
// compile: gcc -o bitfields bitfields.c // run: ./bitfields // description: packing bits into struct #include <stdio.h> struct Flags { unsigned enabled : 1; unsigned mode : 2; unsigned priority : 3; unsigned reserved : 2; }; struct Register { unsigned int addr : 16; unsigned int flags : 8; unsigned int status : 8; }; int main() { struct Flags f; f.enabled = 1; f.mode = 2; f.priority = 5; printf("Flags size: %zu bytes\n", sizeof(f)); printf("Register size: %zu bytes\n", sizeof(struct Register)); return 0; }
Common patterns
Bit field declarations:
unsigned type: nbits: N-bit field- Total bits in struct packed into minimal bytes
- Padding added as needed
Portability issues:
- Bit ordering, signedness, padding are implementation-defined
- Avoid bit fields for cross-platform data
- Use for local optimization only
Limitations:
- Can't take address of bit field (no
&) - Can't use bit fields in arrays
- Alignment and packing unpredictable
Best uses:
- Hardware register mapping
- Local flags struct
- Memory-constrained embedded systems
c-bit-fields.md · Last modified: by 127.0.0.1
