5.1.23 · D1 · Coding › C Programming › Bit fields in structs
Ek core idea: computer ki memory ek lambi line hai choti-choti two-state switches ki, jinhein bits kehte hain, aur normally C tumhe ek saath poora clump deta hai (ek byte ya ek int). Bit field tumhe allow karta hai us clump ko named slices mein kaat'ne ki — sirf utni wide jitni tumhe actually chahiye — taaki kaafi saari small values ek clump share kar sakein instead of har ek ka apna clump hog karna.
Parent note padhne se pehle, tumhare paas uske har word aur symbol ki solid understanding honi chahiye. Yeh page har ek ko absolute zero se build karta hai, ek aisa order mein jahan har idea usse pehle wale par tikha hua ho. Parent topic: Bit fields in structs .
Bit ek single switch hai jo sirf two states mein se ek mein ho sakta hai. Hum un states ko 0 (off) aur 1 (on) likhte hain. "Bit" binary digit ka short form hai.
Ek wall par light switch ki picture banao. Woh ya toh OFF hai ya ON — kabhi "half" nahi. Yeh exactly ek bit hai. Parent note ki har cheez ultimately inhi switches se bani hai.
Is topic ko bit ki zaroorat kyun hai? Kyunki bit field ka poora point hai memory ko ek switch at a time spend karna instead of ek whole box ke. Agar tum individual switch ki picture nahi lete, toh "3 bits wide" sirf noise hai.
Tum das symbols (0–9) se count karte ho. Computer sirf do se count karta hai. Yahi binary (base 2) hai.
Definition Binary place value
Binary mein, har position apne right wali position se do guna worth hoti hai. Right-to-left padhne par positions ki worth hoti hai 1 , 2 , 4 , 8 , 16 , … — yeh powers of two hain. Binary mein likha number, jaise 10 1 2 , ka matlab hai "1 four + 0 twos + 1 one" = 5 .
Is topic ko yeh kyun chahiye: parent constantly aisi cheezein kehta hai jaise "9 = 100 1 2 → 00 1 2 = 1 ". Bina binary padhe kisi bhi overflow ya truncation line ko follow nahi kar sakte.
Parent ka key formula 2 N hai. Chalte hain ise samjhein.
Definition Exponent notation
2 N (padho "two to the power N ") ka matlab hai "N twos ko ek saath multiply karo": 2 3 = 2 × 2 × 2 = 8 . Woh chhota raised number N exponent hai — yeh count karta hai kitni baar multiply karna hai.
2 N combinations kyun count karta hai
Ek bit add karo aur tumhari possibilities double ho jaati hain: tumhare paas jo bhi patterns pehle se thay, naya bit 0 ya 1 ho sakta hai. 1 bit = 2 patterns se shuru karo, aur har extra bit double karta hai. 1 se shuru karke N baar double karna exactly 2 N hai. Isliye ek N -bit field 2 N different values hold karta hai, aur sabse bada 2 N − 1 hai (saare switches on).
Recall Hand se doubling check karo
1 bit ::: 2 patterns (0, 1)
2 bits ::: 4 patterns (00, 01, 10, 11)
3 bits ::: 8 patterns (000 … 111), biggest value = 7 = 2 3 − 1
Byte 8 bits ka ek bundle hai. Yeh memory ka sabse chhota chunk hai jo ek normal C variable occupy kar sakta hai — tum ek byte ko point kar sakte ho, lekin uske andar kisi individual bit ko nahi. Yahi ek fact hai kyun bit fields ki sabse badi restriction hai (no address).
Definition Storage unit (
int-sized box)
Zyaadatar systems par ek int 4 bytes = 32 bits ka hota hai. Compiler bit fields ko ek ek aise 32-bit storage unit mein pack karta hai, phir ek naya shuru karta hai jab agla field fit nahi hoga. 32 switches ki ek row ka picture banao; yahi woh "shelf" hai jo parent draw karta hai.
Tool Data types and sizeof woh hai jo tumhe batata hai ek storage unit 32 bits wide hai; Memory alignment and padding explain karta hai kyun compiler whole units tak round up karta hai (sizeof == 4 deta hai, 1 nahi).
Struct (dekho Structs in C ) named variables ka ek bundle hai jo ek object mein glue hota hai. struct Flags { ... }; ek naye tarah ke box ka naam deta hai; andar har variable ek member hai, dot se reach karo: s.level.
Bit fields bas struct members hain jin par extra " : width" tag hota hai jo compiler ko batata hai "mujhe sirf itne bits do." Toh pehle plain struct se comfortable hona zaroori hai — colon-width syntax uske upar ki sirf nayi cheez hai.
struct Flags { // the struct: a labelled box
unsigned int level : 3 ; // member "level", but only 3 bits wide
};
Definition Unsigned vs signed
Unsigned integer sirf 0 aur upar store karta hai — har bit quantity represent karta hai. Signed integer apna top bit minus sign record karne ke liye qurbaan karta hai, toh woh negative ja sakta hai lekin uska positive range half ho jaata hai. (Full detail: Unsigned vs signed integers .)
Common mistake Yeh 3-bit field ke liye kyun matter karta hai
Sahi lagta hai: "3 bits = 8 values = 0..7." Unsigned ke liye hi sach hai. Ek signed 3-bit field apna top bit sign par spend karta hai, toh woh −4 .. 3 hold karta hai. Jab bhi tumhara matlab 0..2 N − 1 ho, hamesha unsigned int x : N; likho.
Definition Teen symbols jo parent use karta hai
&x — address-of operator: "memory mein x kahan rehta hai?" Bit fields ka koi byte address nahi hota, isliye &s.flag illegal hai.
a mod b (C mein a % b likha jaata hai, math mein \bmod) — divide karne ke baad remainder . Bit field ka overflow exactly value mod 2 N hai: e.g. 13 mod 8 = 5 .
type member : width; — bit-field declaration . Colon is poore topic ki signature move hai.
Manual, no-bit-field tarika individual bits poke karne ka Bitwise operators (& | ^ << >>) use karta hai; bit fields compiler ka woh bookkeeping khud karna hai. Yeh sab chahne ki classic wajah hai Embedded systems / hardware registers .
Parent note padhne se pehle har ek ko zor se bolo:
Bit ki sirf do states kya hain? 0 (off) aur 1 (on).
10 1 2 base ten mein kya hai?5 (ek 4 + ek 1).
2 N ek N-bit field ke liye kya count karta hai?Distinct values ki sankhya jo woh hold kar sakta hai; sabse bada value 2 N − 1 hai.
Ek byte mein kitne bits hote hain? 8.
Ek typical system par bit fields ke liye "storage unit" kya hota hai? Ek int, yaani 32 bits, jisme compiler fields pack karta hai.
Struct member kya hota hai, aur tum usse kaise reach karte ho? Struct ke andar ek named variable, dot se reach karo: s.member.
Signed 3-bit field positive side par sirf 0..3 tak kyun pahunchta hai? Uska top bit sign par spend hota hai, positive range half ho jaati hai (−4..3).
&x kya poochhta hai, aur bit field ke liye yeh illegal kyun hai?"x memory mein kahan rehta hai?" — bit fields byte-addressable nahi hote, isliye unka koi address nahi hota.
13 mod 8 kya equal hai, aur yeh kahan appear hota hai?5 — yeh 3-bit field ko 13 assign karne ka truncation hai.