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 |
---|---|
|
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 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 |
---|---|
|
х é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é. |
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."