"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
int x = 015; 
x értéke 13: 1*8+5
int x = 025; 
x értéke 21: 2*8+5
int x = 0123; 
x értéke 83: 1*64+2*8+3 == 1*8 2 +2*8 1 +3*8 0
int x = 078;
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
int x = 0b100; 
х értéke 4: 1*4+0*2+0
int x = 0b1111; 
х értéke 15: 1*8+1*4+1*2+1
int x = 0b1111000111; 
х é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;
int x = 0b12000;
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."