5.1.11 · D5 · HinglishInstruction Set Architecture (ISA)

Question bankEndianness (big vs little)

1,430 words7 min read↑ Read in English

5.1.11 · D5 · Hardware › Instruction Set Architecture (ISA) › Endianness (big vs little)

Shuru karne se pehle, wo do facts yaad karo jis par neeche sab kuch depend karta hai:

  • Byte sabse chhoti cheez hai jo memory address kar sakti hai; ek wide number consecutive addresses mein split hota hai.
  • Endianness sirf poore bytes ka order choose karta hai — dekho Memory Addressing aur Data Representation.

Sach ya jhooth — justify karo

Endianness stored numeric value ko actually badal deta hai.
Galat. Ye sirf byte placement badalta hai; reconstructed value dono machines par identical hai.
Little-endian har byte ke andar ke bits ko reverse kar deta hai.
Galat. Bits ek byte ke andar kabhi nahi hilte — 0x12 00010010 hi rehta hai; sirf addresses ke across poore bytes ki ordering differ karti hai.
Ek one-byte value (jaise char) big- vs little-endian machines par alag store hoti hai.
Galat. Ek single byte ek address occupy karta hai jisme reorder karne ke liye kuch nahi, isliye endianness uske liye irrelevant hai.
String "Hi" jo {'H','i'} ke roop mein stored hai, little-endian CPU par byte-reverse hokar aata hai.
Galat. Array elements dono machines par apna given order rakhte hain; sirf ek single multi-byte scalar hi endianness se split hota hai (parent mein char[] wali galti dekho).
Big-endian objectively sahi convention hai kyunki ye match karta hai jaise hum numbers likhte hain.
Galat. Koi bhi "sahi" nahi; big sirf ek dump mein natural dikhta hai. Adhiktar CPUs (x86, common ARM) little-endian hain — ye purely ek convention hai jis par dono sides ko agree karna padta hai.
Big-endian mein, lowest address par ek single byte padhna number ka low-order part deta hai.
Galat. Big-endian most significant byte ko lowest address par rakhta hai, isliye wo byte high-order part hai, low nahi.
"Network byte order" ka matlab hai har machine bytes apne native order mein bhejtii hai.
Galat. Network byte order fixed hai big-endian ke roop mein; ek little-endian host ko bhejna se pehle convert karna padta hai (jaise htonl) — dekho Network Protocols.
Same endianness wali do machines ko integers exchange karne ke liye kabhi conversion ki zaroorat nahi.
Sach. Agar dono byte order par agree karein, toh wire par bytes dono ends par bina kisi swap ke same value mean karte hain.
Endianness har program ke liye runtime par naye sar decide hoti hai.
Galat. Ye CPU ke Instruction Set Architecture (ISA) dwara fixed hoti hai; ek program hardware ka byte order nahi badal sakta, sirf uske around kaam kar sakta hai.
>> aur & 0xFF se ek byte extract karna endianness par depend karke alag results deta hai.
Galat. Shifts aur masks (dekho Bitwise Operations) value par operate karte hain, memory layout par nahi, isliye ye endianness-independent hain; sirf pointer ke through raw bytes padhna endianness expose karta hai.

Galti dhundo

"0x12345678 ko address A par little-endian store karne ke liye, A par 12 likho, A+1 par 34, A+2 par 56, A+3 par 78."
Galat — ye big-endian hai. Little-endian LSB pehle rakhta hai: A:78, A+1:56, A+2:34, A+3:12.
"Addresses 100:AA 101:BB 102:CC 103:DD par little-endian mein value 0xAABBCCDD hold karta hai."
Galat. Little-endian mein lowest address par byte LSB hota hai, isliye value hai, 0xAABBCCDD nahi.
"4 bytes mein little-endian mein value 5 hai: 100:00 101:00 102:00 103:05."
Galat — ye big-endian hai. Little-endian nonzero low byte pehle rakhta hai: 100:05, 101:00, 102:00, 103:00.
"Endianness detect karne ke liye, int x = 1 store karo aur check karo ki kya charon bytes 1 ke barabar hain."
Galat. Sirf ek byte nonzero hai (value 1 ke bytes 01 00 00 00 hain); tum lowest address par byte check karte ho — 1 matlab little-endian, 0 matlab big-endian (dekho Pointers and Type Punning).
"4-byte int* ko char* mein cast karke index 0 padhna hamesha most significant byte deta hai."
Galat. Index 0 lowest address hai, jo little-endian par least significant byte rakhta hai aur big-endian par most significant — result machine par depend karta hai.
"Big-endian offset formula hai mem[i] = b_i ek N-byte value ke liye."
Galat. Big-endian index reverse karta hai: . Little-endian hi use karta hai.

Why wale questions

Do endianness conventions aakhir ek universal rule ki jagah exist kyun karte hain?
Kyunki addresses linear hain lekin numbers kai bytes span karte hain, isliye CPU ko ek lay-out order pick karna padta hai; koi cosmic-correct choice nahi hai, isliye alag designers ne alag choose kiya.
Little-endian chhoti width par value padhne ke liye convenient kyun hai?
Low-order byte lowest address par hota hai, isliye 1 byte padhna already correct low part deta hai aur 8→32 bits widen karne mein koi address change nahi chahiye.
Big-endian ko "network byte order" kyun use kiya jata hai?
Ek single fixed convention ki zaroorat thi taaki kisi bhi native order ki machines interoperate kar sakein; TCP/IP ke liye big-endian choose kiya gaya taaki sabhi hosts transmit karne se pehle same order mein convert karein.
Endianness kisi byte array ya string ko kabhi affect kyun nahi karti?
Endianness sirf govern karta hai ki ek multi-byte scalar kaise split hoti hai; array elements already program order mein rakhe hue independent addressable units hain.
Union/pointer trick value 1 se endianness kyun reveal kar sakta hai?
Value 1 mein exactly ek nonzero byte hai (0x01); uski location (lowest vs highest address) directly expose karta hai ki machine ne pehle kaunsa byte rakha.
Little-endian carry-propagation hardware ko simplify kyun karta hai?
Arithmetic carries least significant end se upar flow karti hain; LSB ke lowest address par hone se adder base address se shuru hokar carry ke saath aage march kar sakta hai.

Edge cases

Kya endianness ek single byte mein fit hone wali value ke liye matter karti hai, jaise uint8_t?
Nahi. Sirf ek byte hone par reorder karne ke liye kuch nahi, isliye dono conventions use same store karte hain.
Agar tum 0x00000000 store karo — kya tum uske bytes se endianness bata sakte ho?
Nahi. Charon bytes 00 hain, isliye big- aur little-endian layouts byte-for-byte identical hain; ek symmetric value convention ko chupa deti hai.
Kya 0x12211221 jaisi palindromic value byte-reversal-invariant hai?
Iska byte sequence 12 21 21 12 ek palindrome hai, isliye big- aur little-endian layouts memory mein same dikhte hain bhale hi convention logically differ kare.
Agar ek struct mein ek 1-byte field ke baad ek 4-byte int hai, toh kya 1-byte field endianness se affected hota hai?
Nahi — sirf 4-byte int endianness se split hoti hai; single-byte field apni akeli position rakhta hai regardless (padding/alignment ek alag concern hai).
Kya ek hi program mein endianness mix karna kabhi ho sakta hai?
Haan — "middle-endian" ya mixed layouts historically exist karte the, aur big-endian network data ke saath native data handle karne wala code effectively do orders juggle karta hai, boundary par convert karta hua.
Agar do hosts ki opposite endianness ho, toh kya break hota hai jab wo bina conversion ke ek integer share karein?
Receiver bytes ko galat order mein reconstruct karta hai, ek byte-swapped (usually nonsensical) value yield karta hai; sirf ek single-byte field ya symmetric value bache rehte hain.

Recall Poore trap set ka one-line summary

Same number, alag byte order; byte ke andar bits kabhi nahi hilte; single bytes aur byte arrays immune hain; aur sirf "sahi" endianness wo hai jis par dono sides agree karein.

Connections

  • Instruction Set Architecture (ISA) — endianness CPU ke ISA dwara fixed hoti hai.
  • Memory Addressing — traps low-address/high-address distinction par rely karte hain.
  • Data Representation — value vs byte-layout separation core insight hai.
  • Network Protocols — big-endian network byte order aur conversion boundaries.
  • Pointers and Type Punning — detection trick aur char* casting cases.
  • Bitwise Operations — shifts/masks endianness-independent hain, unlike raw byte reads.