"Nincs jobb a hatékony kódolásnál, Amigo! Bízz egy régi robotban."
– A kémek által használt rejtjelekről beszél?
"Természetesen nem. Az információk emészthető formában történő bemutatásáról beszélek. A számrendszerekről. Tudod, hogy a mindennapi életben a legtöbb ember a decimális rendszert használja . Minden szám 10 szimbólumot használ: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. 10 számjegy van, ezért a rendszert decimálisnak nevezzük."
"Ez kényelmes volt az embereknek a tíz ujjukkal. De a programozók nagy feltalálók. Azonnal kitaláltak olyan kódolásokat, amelyek eltérő számú számjegyet használnak. Például 2, 8, 16 vagy 64 számjegyet. Ezt azért tették, hogy kényelmessé tegye a számítógépek számára, amelyek arra támaszkodnak, hogy „jel van / nincs jel”.
"Ó, látom, mi a közös bennük... Mindezek a rendszerek kettős hatványon alapulnak.
Oktális kódolás
"Jó megfigyelés. Kezdjük egy 8 számjegyből álló kódolással. Az emberek talán ezt találják a legegyszerűbbnek: csak dobd el a 8-as és 9-es számokat, és - bumm -, megvan az oktális kódolás (számrendszer). Nemrég beszéltek a literálokról , ugye ?"
"Igen én voltam."
"Nos, meglepetés! Beállíthat oktális rendszerrel kódolt numerikus literálokat. Természetesen, ha valóban szüksége van rá. Könnyebb, mint amilyennek hangzik. Csak tegyen 0-t az egész szám elé.
"Tehát ha egy numerikus literál nullával kezdődik, az azt jelenti, hogy oktális ?"
"Igen, a Java oktálisként fogja kezelni.
Példák:
Kód | Megjegyzések |
---|---|
|
x értéke 13: 1*8+5 |
|
x értéke 21: 2*8+5 |
|
x értéke 83: 1*64+2*8+3 == 1*8 2 +2*8 1 +3*8 0 |
|
Ez nem fordítható le: a 8 nem tartozik az oktális kódolásban használt szimbólumok közé. |
"Nem valószínű, hogy oktális számokat kell írnia a kódjába, de tudnia kell, mik ezek. "Végül is el kell olvasnia mások által írt kódot. És ahogy fentebb említettük, a programozók nagy feltalálók.
Nos, ne feledd, hogy nem írhatsz 0-t minden szám elé."
– De ha azt akarom, hogy nyolcas legyen, akkor megtehetem?
"Igen.
Bináris kódolás
"Még ha még nem is érted, a bináris kódolás az anyanyelved. Hadd emlékeztesselek rá. Ha az oktálisban csak a 0-7 számjegyek vannak, akkor a binárisban csak a 0 és az 1."
"Miért szükséges ez a kódolás?"
"Mint fentebb említettem, ennek mindennek köze van a számítógép belső felépítéséhez. A számítógépben minden árammal működik, és ahogy ez megtörténik, a leghatékonyabb módja annak, hogy valamit elektromos áram segítségével tároljunk és továbbítsunk, az, ha két állapotot használunk: vagy nincs áram a vezetékben (nulla), és van áram (egy)."
– Ezért olyan népszerű... Hmm, úgy tűnik, tényleg kezdek emlékezni erre a nyelvre!
"Minden robot tökéletesen érti. Bár a Java-ban nem használják túl gyakran. A Java magas szintű nyelvnek számít, teljesen elvonatkoztatva attól a hardvertől, amelyen fut. Valóban érdekli, hogy milyen formátumot használnak az adatok tárolására és feldolgozására számítógép belsejében?
"Az elmúlt évtizedek során azonban a programozók megszerették a bináris kódolást (és az arra épülő más kódolásokat). Ennek eredményeként a Java-nak vannak olyan operátorai, amelyek bináris számokat vesznek fel bemenetként. A lebegőpontos számok pontossága pedig a bináris kódjuktól függ reprezentáció.
"Röviden: jobb, ha tudsz erről a kódolásról, mint ha nem tudsz."
"Helyes. És ahogy az oktális kódolás esetében volt, a Java-nak is van módja a literálok kódolására a bináris rendszer segítségével."
– Tehát csak 0-ból és 1-ből fognak állni?
"Pontosan. Annak érdekében, hogy a Java fordító megértse, hogy a kód binárisan kódolt numerikus literált tartalmaz, nem pedig egyszerűen nullákból és egyesekből álló decimális számot, szokásos, hogy minden bináris literál a 0b előtaggal kezdődik (a ' b ' a bináris szóból származik).
Példák:
Kód | Megjegyzések |
---|---|
|
х értéke 4: 1*4+0*2+0 |
|
х értéke 15: 1*8+1*4+1*2+1 |
|
х értéke 967: 1*2 9 +1*2 8 +1*2 7 +1*2 6 +0*2 5 +0*2 4 +0*2 3 + 1*2 2 + 1*2+1; |
|
Ez nem fordítható le: a 2 nem tartozik a bináris kódolásban használt szimbólumok közé. |
Hexadecimális kódolás
– Mennyi a kettő a negyedik hatványhoz?
– Tizenhat. Jól tetted a kérdést, hogy feltegyél egy olyan robotot, aki odáig jutott, mint én!
"Úgy tűnik, messzire jutottál. Egyébként tizenhat. Az oktális és bináris kódolások mellett a literálokat hexadecimálisan is lehet írni. Ez egy nagyon népszerű kódolás.
"Ez azért van, mert bár a bináris jelölés a lehető legközelebb áll a számok tényleges tárolási módjához, az emberek számára túl nehéz hatékonyan dolgozni ilyen számokkal: binárisan az egymillió 20 számjegyből áll, nem 7-ből.
"Ezért találták ki a programozók a hexadecimális rendszert. Végül is, ahogy helyesen megjegyezted, a 16 a 2-t jelenti a 4. hatványra emelve, tehát pontosan 4 bit felel meg egy hexadecimális számjegynek.
"Tehát minden 4 bit most egyetlen hexadecimális számjegyben írható."
"Helyes. A hexadecimális kódolásnak is megvan a maga egyedi előtagja: 0x . Példák:
Decimális szám | Bináris jelölés | Hexadecimális jelölés |
---|---|---|
17 | 0b 0001 0001 | 0x11 _ _ |
4 1 | 0b 0010 1 00 1 | 0x29 _ _ |
85 | 0b 0101 0101 | 0x5 5 _ |
256 | 0b 1 0000 0000 | 0x 1 0 0 |
"Oké, így elég világos, hogyan kaptuk meg az oktális rendszert: csak kidobtuk a 8-as és a 9-es számokat. De honnan vegyük a 6 hiányzó számjegyet a hexadecimális rendszerhez? Szeretném látni!"
"Minden egyszerű. Az angol ábécé első 6 betűje a 6 hiányzó számjegy: A (10), B (11), C (12), D (13), E (14), F (15) .
Példák:
Hexadecimális jelölés | Bináris jelölés | Decimális szám |
---|---|---|
0x1 _ | 0b 0000 0001 | 1 |
0x9 _ | 0b 0000 1001 | 9 |
0x A | 0b 0000 1010 | 10 |
0x b | 0b 0000 1011 | 11 |
0x C | 0b 0000 1100 | 12 |
0x D | 0b 0000 1101 | 13 |
0x E | 0b 0000 1110 | 14 |
0x F | 0b 0000 1111 | 15 |
0x 1 F | 0b 0001 1111 | 31 |
0x A F | 0b 1010 1111 | 175 |
0x F F | 0b 1111 1111 | 255 |
0x F F F | 0b 1111 1111 1111 | 4095 |
"Hogyan alakítasz át egy hexadecimális számot decimálissá?"
"Ez nagyon egyszerű. Tegyük fel, hogy megvan a 0 x A F C F szám . Ez mennyi tizedesben? Először is van egy pozíciószámrendszerünk, ami azt jelenti, hogy minden számjegynek a teljes számhoz való hozzájárulása a tényezővel nő 16, ahogy jobbról balra haladunk:
A * 16 3 + F * 16 2 + C * 16 1 + F
Az A szimbólum a 10-es számnak felel meg, a C betű azt mondja, hogy a 12-es számunk van, az F betű pedig tizenötöt jelent. Kapunk:
10 * 16 3 + 15 * 16 2 + 12 * 16 1 + 15
A 16-ot a számoknak megfelelő különböző hatványokra emelve a következőket kapjuk:
10 * 4096 + 15 * 256 + 12 * 16 + 15
Mindent összegezünk, és megkapjuk:
45007
"Most már tudja, hogyan tárolódik a 45007 a memóriában."
"Igen, igen. Ez 0x A F C F "
"Most alakítsuk át binárisra. Binárisban ez lenne:
0b 1010 1111 1100 1111
"Minden négy bites halmaz pontosan egy hexadecimális karakternek felel meg. Ez rendkívül kényelmes. Szorzás vagy hatványozás nélkül."
GO TO FULL VERSION