You are on page 1of 4

ENDIAN

My tnh lu tr thng tin di dng hon ton l bit. iu ny ny sinh ra mt s iu th v khi ta dch nhng thng tin . Gi s ta gp phi mt chui bit c dng nh sau 10011b. C ngi s c ton b chui bit ny v dch n ra thnh 19 (dng thp phn), nhng cng c ngi bo ti khng quan tm 3 bit u (100) ti ch 2 bit cui (11) v ti chuyn n thnh 3 (dng thp phn). Li c ngi c ko phi theo chiu t tri sng phi m li t phi sang tri, do vy 10011b s thnh 11001b v lc ny dng thp phn ca chui bit trn li l 25. Vy trnh b hiu nhm, ta c nn nht qun quy trnh dch thng tin ny khng? Cc n v o thng tin trn my tnh by gi u hu nh ti thiu l byte ch chng ai o bng bit c v mt l rt n gin con ngi thch x l vi s nh. 1M tht l ngn gn hn so vi dng tng ng l 1000000 (10^6). Di dng tng byte, my tnh cng thng nht vi nhau rng s c t tri sang phi tng bit mt cho n khi 8 bit ta s quy v c 1 byte. N cng s ging nh cch c ca chng ta thng thng l t tri sang phi. Hc xong mn Cu trc my tnh mnh mi nhn ra rng ti nhng nh c a ch xc nh n s lu tr c mt byte d liu. Cc k t trong bng m ASCII cng di l mt byte, kiu char trong ngn ng C cng c di l mt byte. Khi my tnh c ghi thng tin, cc byte s ln lt c ghi t a ch thp n a ch cao. Mt chui k t dng HVKTQS s c lu nh sau trong my tnh: Gi tr byte a ch b nh H +1 V +2 K +3 T +4 Q +5 S +6

Trong l mt a ch no trong my tnh. Vy l chng c g c bit. khng, ta mi ch ang xt d liu di dng n v byte, chng ta cn c kiu int (4 byte), kiu short (2 byte). 4 byte (kiu int) hon ton s c nhng a ch tng ng l , +1, +2, +3 (vi mi mt byte d liu ta lun lun c a ch nh cha n) bi 4 byte y l 4 byte lin tip. biu th mt gi tr kiu int di dng a ch, liu ta c cn n 4 a ch (4 nh lin tip). Chc chn l khng ri, vi nhng kiu d liu ln hn 1 byte, ngi ta u quy c a ch n nhng gi tr thuc kiu d liu s l a ch ca byte u tin, sau ty thuc vo di ca kiu d liu , ngi ta s c tip cc byte tip theo sao cho chiu di ca kiu d liu th s dng. Chng ta hy n vi v d. VD1: Ta c mt s nguyn kiu int vi gi tr l 16710 = 4146h. Ta bit kiu int s l 4 byte vy nn nu quy ra ln lt thnh cc byte, 4146h s l 00 00 41 46 (mi mt cp s hexa l mt byte)

Trong my tnh, 4146h c th c lu nh sau (1): Gi tr byte a ch trong b nh 00h 00h +1 41h +2 46h +3

Trong m hnh ny, 2 byte cao nht (00h v 00h) c lu nh thp hn so vi 2 byte cao (41h v 46h) Vy nu ta nh c a ch v ta ang lm vic vi s nguyn, ta hiu rng t a ch ta phi dn thm 3 nh na c ra 3 byte k tip to thnh 4 byte kiu int. Nhng li c ngi nh +2 v anh ta ang lm vic vi kiu char (1 byte), vy ch mnh nh +2 l v khi khi chuyn thnh d liu con ngi hiu c th y l ch ci A (A trong bng m ASCII l 41h). Cuc sng khng phi l n gin, 4146h c th c lu di dng khc nh sau (2): Gi tr byte a ch trong b nh 46h 41h +1 00h +2 00h +3

Nh cc bn thy, cc byte thp c lu nh thp, byte cao lu nh cao. Vy mt ngi nu nh +2 lm vic vi kiu char th anh ta nhn c k t NULL (NULL = 00h trong ASCII). (1) v (2) s nguyn c gi tr l 4146h u c a ch l (a ch ca byte u tin). Trong thc t ta phi lm vic vi cc thng tin lu tr di dng byte (kiu char) hay mt nhm byte (kiu int, short, double). cho tin khi lm vic vi cc nhm byte, ngi ta t tn nh sau: Nhm 2 byte: 16 bit word hay word, tng ng vi kiu short trong C/C++ Nhm 4 byte: 32 bit word hay double word, tng ng vi kiu int trong C/C++ Nhm 8 byte: 64 bit word hay quadruple word, tng ng vi kiu double trong C/C++ C ngi s hi: ti sau phi t tn n nh vy? Rt n gin, lnh vc khoa hc my tnh cng nh thit k phn cng khng th din gii n v d liu di dng kiu d liu c trng ca mt ngn ng no nh C hay C++. N phi l n v c tnh tng quan. (1) v (2) l 2 cch thc tiu biu cho lu tr thng tin my tnh hin nay, gi chung l endian. Endian ch ra cch thc my tnh lu tr th t cc byte nh th no trong mt nhm cc byte nh 16 bit word, 32 bit word, 64 bit word, c th l:

(1) Big edian: byte cao s c lu tr nh u tin trong vng nh c cp pht cho word,
sau n cc byte thp hn lu tr cc nh cao hn.

(2) Little endian: byte thp s c lu tr nh u tin trong vng nh c cp pht cho
word, sau cc byte cao hn s c lu tr nh cao hn. Ti sao li phi quan tm n endian? Bi gia cc my tnh vi nhau nhiu khi s khng thng nht trong cch thc lu tr d liu (big endian hay little endian) v vy khi trao i d liu s gy hiu nhm. Mt lu rt quan trng: Ta khng quan tm n endian n u ta ch lm vi c v i byte. V my tnh lun lun l u tr cc byte theo th t cc nh t th p n cao . Ngoi ra vi big endian hay little edian, th t cc word cng khng phi l vn . Cc word lun c lu t nh c a ch thp n nh c a ch cao hn. Chng ta ly v d lm sng t vn ny: VD2: Trong my A, c mt dy cc byte nh sau: Gi tr byte K t ASCII tng ng a ch trong b nh my A khi gi a ch trong b nh my B khi nhn 41h A 42h B 43h C 44h D

+1

+2

+3

+1

+2

+3

A mun gi dy 4 byte ny ti B. A v B trc u ng vi nhau rng A ang gi ti B mt chui k t c di l 4 v khi gi tin, byte thng tin lun c gi t nh thp n nh cao do n khi B nhn c y dy 4 byte ny, B dch thnh mt chui k t l ABCD (vn ng l iu A mong mun). By gi A vn gi dy 4 byte trn (1 double word) ti B, nhng A v B tha thun trc vi nhau rng A gi B mt s nguyn thuc kiu int khng du. A ang lu tr thng tin di dng big endian, B lu tr thng tin di dng little endian. Vy s nguyn m A ang mong mun y l 41424344h = 1094861636. Nhng s nguyn m B nhn c sau khi dch ra t dy 4 byte trn li l 44434241h = 1145258561. R rng l hai s khc nhau. S li c bn cha hnh dung c ti sao vi chui k t th my A v my B vn gi v hiu ng d endian ca 2 my l khc nhau. Nu bn ri vo trng hp ny, bn nn nh vi chui k t (ly bng m ASCII cho n gin) chng ta khng th quy v di dng cc word m phi dng byte v chui k t c di a dng (3 byte, 15 byte, 31 byte, tng ng vi di ca chui).

tng kt v endian, ta c th thy big endian lu tr thng tin theo ng cch m chng ta vn c s hexa (byte cao nht lu trc) cn little endian th ngc li (byte thp nht lu trc). Vy nn mt s vit di dng con ngi c c: 100 khi chuyn sang 1 word s l [00 64] (64h) nu big endian my tnh s lu ng l [00 64] cn my little endian s lu 1 word thnh [64 00].