1. Oktális kódolás

Ha már a kódolásoknál tartunk... Mint tudod, a mindennapi életben decimális jelölést használunk : minden számunk 10 szimbólummal van ábrázolva: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. 10 van. számok, ezért a rendszert decimálisnak nevezzük.

De a programozók nagy feltalálók. Azonnal kitaláltak olyan kódolásokat, amelyek eltérő számú szimbólumot használnak. Például 16, 8 és 2.

A 8 szimbólumot használó alternatív kódolás a legegyszerűbb: csak dobja el a 8-at és a 9-et, és kap egy oktális kódolást (az oktális számrendszert ).

És igen, használhatja az oktális rendszert a numerikus literálok megadására. Persze ha nagyon muszáj. Könnyebb, mint amilyennek hangzik. Csak a 0-t kell a szám elé írni.

Más szavakkal, a Java minden 0-val kezdődő egész literált oktális értékként kezel.

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 beírnia a kódba, 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 feledje, hogy nem írhat egyszerűen 0-t minden szám elé.



2. Bináris kódolás

A bináris kódolás még érdekesebb. Ha az oktálisnak csak a 0-7 számjegye van, akkor a binárisban csak 0 és 1. Miért van szükség erre a kódolásra?

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 megtörténik, a leghatékonyabb módja annak, hogy valamit elektromos árammal tároljunk és továbbítsunk, két állapotot használunk: vagy nincs áram a vezetékben (nulla), és van áram (egy).

Ez az eredete a kettes számrendszer népszerűségének.

Elvileg nem túl gyakran használják a Java-ban: a Java magas szintű nyelvnek számít, teljesen elvonatkoztatva attól a hardvertől, amelyen fut. Valóban érdekli Önt, hogy milyen formátumban tárolják és dolgozzák fel az adatokat a számítógépen belül?

De az elmúlt évtizedek során a programozók megszerették a bináris kódolást (és más, azon alapuló kódolásokat). Ennek eredményeként a Java-nak vannak olyan operátorai, amelyek bináris számokat vesznek bemenetként. A lebegőpontos számok pontossága pedig a bináris ábrázolásuktól függ.

Alapvetően jobb, ha tud erről a kódolásról, mint ha nem tud.

Az oktális kódoláshoz hasonlóan a Java-nak is van módja a literálok kódolására a bináris rendszer segítségével. Vagyis a literálok csak 0-ból és 1-ből állnak. 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, az összes bináris literált a 0b előtaggal azonosítja (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é.


3. Hexadecimális kódolás

Az oktális és bináris kódolások mellett a literálok hexadecimálisan is írhatók. Ez egy nagyon népszerű kódolás.

Ez azért van így, 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ó szám 20 számjegyből áll, nem 7-ből.

A programozók ezért találták ki a hexadecimális rendszert. Végül is a 16 a 2-t jelenti a 4. hatványra emelve, tehát pontosan 4 bit felel meg egy hexadecimális számjegynek. Nagyjából elmondható, hogy most már minden 4 bit felírható egyetlen hexadecimális számjegyként.

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é, azt mondod, elég világos, hogyan kaptuk az oktális rendszert: csak kidobtuk a 8-as és a 9-es számokat, de honnan vegyük a 6 plusz szimbólumot a hexadecimális rendszerhez? Szeretném látni őket!

Minden egyértelmű. Az angol ábécé első 6 betűjét a 6 hiányzó szimbólumnak vettük: 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


4. Hogyan alakíthatunk át egy számot hexadecimálisból

Egy szám hexadecimálisról decimálisra konvertálása nagyon egyszerű. Tegyük fel, hogy megvan a 0 x A F C F szám . Mennyi ez tizedesben?

Először is van egy helyzetszámrendszerünk, ami azt jelenti, hogy az egyes számjegyek hozzájárulása a teljes számhoz 16-szorosára nő, ahogy jobbról balra haladunk:

A * 16 3 + F * 16 2 + C * 16 1 + F

Az A szimbólum a 10-es számnak, a C betű a 12-nek, az F betű tizenötnek felel meg. 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

Tudja, hogyan tárolódik ez a szám a memóriában:

0x A F C F

De most alakítsuk át binárisra. Binárisan ez lenne:

0b 1010 1111 1100 1111

Minden négy bitből álló halmaz pontosan egy hexadecimális karakternek felel meg. Ez szuper kényelmes. Mindenféle szorzás és hatványozás nélkül."