“Ez mind 1-es és 0-s.” Az emberek ezt mondják, amikor viccelődnek vagy szarkasztikus megjegyzést tesznek. Amikor a számítógépek gondolkodásáról van szó, ez tényleg igaz. És a hardverek szintjén csak ennyi van. A processzor, a memória, a különböző tárolási formák, az USB, a HDMI és a hálózati csatlakozók, valamint minden más abban a mobiltelefonban, táblagépben, laptopban vagy asztali számítógépben csak 1-eseket és 0-akat használ. A bájtok biztosítják az 1-ek és 0-k csoportosítását. Így nagy segítséget jelentenek a rendszerezésben. Nézzük meg, hogyan teszik ezt.
A bájtok a számítógépen tárolt és használt adatok és programok mértékegységei. Bár a bájt már régóta létezik a számítógépek történetében, és többféle formát is öltött, a jelenlegi 8 bites hossza jól bevált. Egyenként vagy egymás melletti csoportokba rendezve a bájtok az általánosan elfogadott legelterjedtebb módja a számítógépben lévő bitek rendszerezésének.
Szóval, mi az a bit? A bit egy bináris számjegy; azaz csak két értéke lehet. A számítógépekben a bit két értéke a nulla (0) és az egy (1) lehet. Ennyi, nincs más lehetőség. Egy bájt nem más, mint nyolc bináris bit, amelyek együttesen bináris számokat képviselnek. Különböző kódolási sémák révén a számok sokféle más dolgot is ábrázolhatnak, például a karaktereket, amelyekkel írunk.
Az alábbi táblázat egyetlen Big-Endian bájtot mutat, bemutatva a bájt egyes bitjeit és a hozzájuk tartozó kettes hatványokat. Az összes adatbájt Big-Endian formátumban van. Vannak más bájtok, például programkódok, ahol az endián formázás nem érvényes. Az egyes bitek tizedes értékei a kettes hatványaival együtt jelennek meg. Képzelje el, hogy a 3. bit és a 4. bit között van egy vonal, ahol a bájt négy bitcsoportra, úgynevezett Nibbletekre van felosztva. A Little-Endian egy nagyon gyakran használt bájtformátum. Maradjon velünk, ha többet szeretne megtudni az endiánokról. Ha kíváncsi vagy a névre, keress rá a (etymology of endian) oldalon.
Egy Big-Endian bájt:
Bit0 | Bit1 | Bit2 | Bit3 | Bit4 | Bit5 | Bit5 | Bit6 | Bit7 | |
Power of 2 | 27 | 26 | 25 | 24 | 23 | 22 | 22 | 21 | 21 |
Decimális érték | 128 | 64 | 32 | 16 | 8 | 8 | 4 | 2 | 1 |
Egy bájt minden nibble-je egy négybites bináris számot tartalmazhat a következő táblázat szerint. Ha egy bit “1”-re van állítva, akkor az a kettes hatványa hozzáadódik a nibble értékéhez. Ha egy bit “0”-ra van állítva, akkor az a kettes hatvány nem adódik hozzá a nibble értékéhez. Egy bájt, amely két nibble, kétjegyű hexadecimális számot tartalmazhat. A bitek valóban minden, amit egy számítógép használni tud. A programozók és a számítógépes hardvert fejlesztő mérnökök azért használják a hexadecimális számrendszert, hogy megkönnyítsék a bitek kezelését. Az alábbi táblázatban a legjelentősebb bit a bal oldalon van 20, 21, 22, 23
Egy nagyvégű nibble:
Binary Number |
Hexidecimal Value |
0000 | 0 |
0001 | 1 |
0010 | 0010 | 2 |
0011 | 3 |
0100 | 4 |
0101 | 5 |
0110 | 6 |
0111 | 7 |
1000 | 8 |
1001 | 9 |
1010 | A |
1011 | B |
1100 | C |
1101 | D |
1110 | E |
111111 | F |
Majd megmagyarázom Nagy-Endiánt egy egybájtos diagrammal kezdve. A hosszabb vonalak ennek a keretnek a végén a bájt határait jelölik, így ha egy egymás melletti bájtcsoportot rajzolnánk, egyértelmű lenne, hogy az egyik bájt hol hagyta abba, és hol kezdődik a másik. A kis vonalak a keretet egyes helyekre osztják, ahol a nyolc bit mindegyike megjeleníthető. A középső közepes vonal a bájtot két egyenlő négy bites darabra osztja, amelyek a nibble-ek. A nibbleteknek is hosszú és változatos története van. Soha nem láttam, hogy szabványosították volna őket. A jelenlegi jól bevált nézet azonban az, hogy a nibble-k négy bitből álló csoportok, ahogyan az alábbiakban bemutattam őket. Mindezek a vonalak csak úgy léteznek, hogy az emberek bájtokat rajzolnak. A vonalak nem léteznek a számítógépben.
A felső nibble és az alsó nibble olyan címkék, mint amilyeneket egy nagy-indiai bájtban használnának. Big-Endianban a legjelentősebb számjegy a szám bal végén van. Így az Alsó Nibble a szám legkevésbé jelentős fele a bájtban. Hasonlóképpen a legkevésbé jelentős bit a jobb oldalon van LSBit (általában LSB-ként jegyzik) a Least Significant Bit (legkevésbé jelentős bit) rövidítése. A legjelentősebb bit pedig a bal oldalon van. A bal oldali Upper Nibble a szám legjelentősebb fele. Az MSBit (általában MSB-ként jegyzik) a legjelentősebb bit. Ez megegyezik azzal, ahogyan a decimális számokat írjuk, ahol a legjelentősebb számjegy a bal oldalon van. Ezt nevezzük nagyvégűnek, mert a szám “nagy vége” következik először.
Mivel a bájt két hexadecimális számjegyet képes tárolni, egy bájtba 00 és FF közötti hexadecimális számok férnek bele (decimálisan 0-tól 255-ig) Tehát ha bájtokat használunk egy ember által olvasható nyelv karaktereinek ábrázolására, akkor egyszerűen minden egyes karakterhez, írásjelhez stb. egy számot adunk. (Aztán persze mindenkit ráveszel, hogy értsen egyet az általad kitalált kódolással.) Ez csak egy felhasználási módja a bájtoknak. A bájtokat használják a számítógépen futó programkódként is, a különböző adatok számaként, és minden másként, ami egy számítógépben lakozik a CPU-ban, a memóriában, a tárolóban, vagy a különböző buszokon és interfészportokon zoomolva.
Mint kiderült, két általánosan használt bájtformátum létezik. A Little-Endian-t használtuk az előző példákban. Jellemzője, hogy a legjelentősebb számjegy a bal oldalon, a legkevésbé jelentős számjegy pedig a jobb oldalon van.
Létezik egy Little-Endian nevű formátum is. Mint az várható volt, ez a Big-Endian ellentéte, a legkevésbé jelentős számjegy a bal oldalon, a legjelentősebb számjegy pedig a jobb oldalon van. Ez az ellentéte annak, ahogyan a tizedes számokat írjuk. A Little-Endian nem a bitek sorrendjére használatos egy bájton belül, hanem a bájtok sorrendjére egy nagyobb struktúrában. Például: Egy két bájtból álló Little-Endian Wordben szereplő nagy számnak a bal oldalon lenne a legkevésbé jelentős bájtja. Ha a két bájtos szám nagy-indiai lenne, a legjelentősebb bájt a jobb oldalon lenne. A Little-Endian csak hosszú, több bájtos számok esetében használatos, hogy a nagyobb adatstruktúrában a bájtok jelentőségi sorrendjét beállítsa.
A Big és Little bájtsorrendezés használatának is vannak okai, de a lényeges okok meghaladják ennek a cikknek a kereteit. A mikroprocesszorokban azonban inkább a Little-rendezést használják. A legtöbb PC-ben található x86-64 processzorok a Little-Endian bájtformátumot használják. Bár a későbbi generációk rendelkeznek olyan speciális utasításokkal, amelyek korlátozottan lehetővé teszik a Big-Endian formátum használatát. A Big-Endian bájtformátumot széles körben használják a hálózatokban és különösen a nagy Z számítógépekben. Most már nem feltétlenül korlátozódik az egyikre vagy a másikra. Az újabb ARM processzorok bármelyik Endian formátumot használhatják. Az olyan eszközöket, mint a mikroprocesszorok, amelyek mind a Big-Endian, mind a Little Endian bájtsorrendezést tudják használni, néha Bi-Endian-nak nevezik.
Néha tényleg egynél több bájtra van szükség egy szám tárolásához. Erre a célra hosszabb formátumok állnak rendelkezésre, amelyek több bájtból állnak. Például: Az x86-64 processzorok rendelkeznek olyan szavakkal, amelyek 16 bitből vagy 2 bájtból állnak, amelyek történetesen úgymond fej-fej mellett sorakoznak. Vannak továbbá Double Words (32 bit vagy 4 bájt) és Quad Words (64 bit vagy 8 bájt). Ezek most csak példák a processzor hardvere által rendelkezésre bocsátott adatformákra.
A nyelvekkel dolgozó programozóknak sokkal több módja van a bitek és bájtok szervezésére. Amikor a program elkészül, egy fordítóprogram vagy más mechanizmus átalakítja a program bitjeinek és bájtjainak szervezési módját olyan adatformákká, amelyeket a processzor hardvere kezelni tud.