Bit fields in structs
5.1.23· Coding › C Programming
Topic: Data ko individual bits mein pack karna ek struct ke andar, taaki har member sirf utne hi bits use kare jitne aap maango, na ki poora byte/int.
The Big Picture
struct Flags {
unsigned int isActive : 1; // 1 bit -> stores 0 or 1
unsigned int level : 3; // 3 bits -> stores 0..7
unsigned int mode : 4; // 4 bits -> stores 0..15
};WHY do bit fields exist?
- WHAT problem: memory aur hardware registers. Ek device status register ek 8-bit byte ho sakta hai jahan bit 0 = "ready", bits 1–3 = "speed", etc.
- WHY useful: aap memory bachate ho jab kai chhoti values store karni hon (network packet headers, embedded systems, file formats) aur aap hardware bit layouts ko directly C mein mirror kar sakte ho.
- HOW it works: compiler ek "current storage unit" aur ek offset track karta hai; har naya bit field agli free bits pe place hota hai, offset aage badhta jaata hai. Jab ek field fit nahi hoti (ya aap force karte ho), ek naya unit shuru hota hai.
How many values fit in N bits?
Memory layout and packing

struct S {
unsigned a : 5; // boxes 0..4
unsigned b : 5; // boxes 5..9
unsigned c : 25; // would need boxes 10..34 -> won't fit!
}; // c starts a NEW int => struct is 8 bytesThe zero-width trick
struct Reg {
unsigned low : 4;
unsigned : 0; // align to next unit
unsigned high : 4; // starts in a new int
};Rules & Restrictions (the gotchas)
Forecast-then-Verify
Flashcards
x naam ka 4-bit unsigned struct member kaise declare karte hain?
unsigned int x : 4;Ek N-bit unsigned bit field mein kitne distinct values hote hain?
Bit field flag ke liye &s.flag illegal kyun hai?
3-bit field mein 9 assign karne par kya hota hai?
Unnamed zero-width field unsigned : 0; kya karta hai?
Teen 1-bit fields wale struct ka sizeof 1 nahi balki 4 kyun ho sakta hai?
Bit fields ke liye kaun se types allowed hain?
int, signed int, unsigned int, aur _Bool (C99).Ek signed 3-bit field ki range?
Kya bit-field allocation order (low→high vs high→low) standard se defined hai?
Recall Feynman: explain to a 12-year-old
Ek lambi shelf socho jisme 32 chhote slots hain. Normally agar aap ek haan/naa ka jawaab store karna chahte ho, toh aap ek poori alag shelf ke 32 slots barbaad kar dete ho. Bit fields aapko kehne dete hain "is jawaab ko sirf 1 slot chahiye," toh aap ek shelf pe bahut saare chhote jawaab fit kar sakte ho. Catch yeh hai: kyunki jawaab ek chhote se slot mein thunsa hua hai, apne labeled box mein nahi, aap use point karke nahi keh sakte "yeh uska exact address hai" — aur agar aap usme bahut bada number store karne ki koshish karo, toh extra digits bas edge se gir jaate hain.
Connections
- Structs in C — bit fields ek special tarah ke struct member hain.
- Bitwise operators —
& | ^ << >>bit fields ke manual alternative hain. - Data types and sizeof — kyun int storage unit hai.
- Memory alignment and padding — zero-width field alignment control karta hai.
- Embedded systems / hardware registers — main real-world use case.
- Unsigned vs signed integers — khoya hua sign bit explain karta hai.