Mi a Hex?

Ebből kicsit tudást kell tennem.

A Marsban (2015) elején van egy jelenet, ahol Matt Damon karakter, Mark Watney, akit feltételezték, hogy a csapattársai meghalták, és szörnyű vihar után a vörös bolygóra kerültek, újraélesztik a romlott Pathfinder szondát a NASA-val való kommunikáció érdekében. Miközben a szonda képeket képes visszajuttatni a képeket a Földre, a NASA legjobban távolról képes a szondával a fedélzeti kamera helyzetének megváltoztatására.

Watney rájön, hogy a kamera 360 fokos forgási sebessége lehetővé tenné a NASA csapata számára, hogy levélben levélben továbbítsa neki az üzeneteket, ha képes ábécéként ellátni a szonda kameráját. Ez a megoldás azonban újabb problémát jelent. A latin ábécé 26 karakterből áll, angolul, ami azt jelenti, hogy nagyon közel kell lenniük egymáshoz a szonda körül egy körben, és nagy valószínűséggel nehézségekbe ütközik, hogy megtudja, melyik betűt a szonda jelzi.

- Nem lehet az ábécé. 26 karakter, plusz egy 360-as kérdõkártya 13 ívfokozatot ad nekünk. Ez túl keskeny. Soha nem tudtam, hogy a kamera mire mutat. Hexadecimals ment.

Tehát Watney ehelyett hexadecimálok és ASCII-tábla segítségével oldja meg a problémát a NASA kódolt üzeneteinek megfejtésére, és mielőtt megtudná, hogy nem csak igen / nem kérdéseiben képes beszélni a Földdel.

Névhitelek

…várj, mi?

Tudod, hogy összetett matematikát végez, amikor betűket használ.

Beismerem, hogy csak alig értem, mi történt ebben a jelenetben, amikor először láttam a filmet. Egy nagyon fejlett tudományos elképzelésekkel ellátott filmben ez a jelenet ragaszkodott nekem, mert egy nagyon egyszerű ötletnek tűnt, amely ennek ellenére átjutott a fejemre. Úgy tűnik, hogy Ridley Scott rendezőnek nehezen tudta ábrázolni ezt a jelenetet, mert ő nem értette meg teljesen a koncepciót.

Most tanulok programozást, és rájöttem, hogy még ha a magasabb szintű nyelvek, például a Ruby vagy a Javascript bonyolult is elsajátíthatók, még mindig nagyon távol vannak az alapvető gépi kódtól, amely pusztán az 1-es és a 0-as számítógépeket hajtja végre. . Ez a alacsony szintű programozás mindig megfélemlített, és valószínűleg ez volt a fő oka annak, hogy fél éve kevés érdeklődést mutattam a számítástechnika iránt, mint karrierpálya, mielőtt a programozás hozzáférhetőbb szakmává vált. Mivel azonban 6 hete kezdtem el a fejlesztő felé vezető úton, megtanultam, hogy bármilyen összetett tevékenységet / koncepciót kezelhető méretre bonthat, ha csak darabonként lép át.

Tehát kezdjük a hexadecimális szóval. Ez a görög hexa, azaz a 6. és a decimális értékből származik, amely a latin decimusból származik, ami tizedik. A hexadecimális számjegyek olyan rendszere, amelynek alapja 16, ahelyett, hogy 10 lenne, mint ahogy a „normál” tizedes.

Most, ha el kellene magyaráznia egy base10 számrendszert valakinek, aki még soha nem végzett aritmetikát, akkor először el kell magyaráznia, miért volt előnyös, ha elsőként egy numerikus rendszert használtak. Végül is ugyanolyan könnyen használhatunk egy egyszerű perjelet (“\”) az objektumok mennyiségének jelölésére. Például egy halat lehet halnak, két halat \\ halnak, három halat \\ halnak és így tovább. Elméletileg bármilyen halmennyiséget képviselhet egyetlen karakter felhasználásával. A gyakorlatban azonban ez kezelhetetlenné válik, ha nagy mennyiségű halba kerül. Még ötven hal halhatatlanul hosszú húrré válik.

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ hal
A halaknak nincs rövid távú memóriatartománya ahhoz, hogy elképzeljék ezt a sokat, és te sem.

Egy base10 decimális rendszert használva nagyon könnyen ábrázolhatjuk a fenti perjelzéssel 1000-szeresnél nagyobb halak mennyiségét a tizedes számának egytizedével. Néhány szimbólumot kell használni, mint az egyszerű perjelnél, de a hatékonyság kompromisszuma megéri. Valójában annyira hatékony, hogy csak a szimbólumok két kombinációjára lenne szükség, hogy a fenti 50 halat ábrázoljuk.

A számjegyek az base10 rendszerben:

0 1 2 3 4 5 6 7 8 9

ahol

0 = 1 = \ 2 = \\ 3 = \\\ 4 = \\\\ 5 = \\\\\ 6 = \\\\\ 7 = \\\\\ \\ 8 = \\\\ \ \\\ 9 = \\\\\ \\\\

Tehát a halat ehelyett 4 halnak lehet írni, amelyek a terület töredékét foglalják el. Ha elérte a 9-nél nagyobb mennyiséget, akkor az 1-el kell kezdődnie, és hozzá kell adnia egy helyőrző számot, 0.

10 = \\\\\ \\\\\

Ha 10-nél nagyobb mennyiséget szeretnénk képviselni, mint például 4-et, mint 10-et, akkor a 10-es és a 4-es számjegyeket egyesítjük, így 14

10 = \\\\\ \\\\\ 4 = \\\\ 14 = \\\\\\\\\\ \\\\

Amint ismét elértük a 9-et, csak megismételjük és növelik az első számjegyet egyszeresen.

... 17 18 19 20 21 ...

Ezt a mintát egészen 99-ig követhetjük, ahol a mintát újra megkezdhetjük 10-gyel és egy extra 0: 100-tal. Tehát egy tizedesrendszerben 10-re alapozva minden további 0 hozzáadása jobbra növeli a számot tízszer. mint az előző.

10 * 1 = 10 10 * 10 = 100 10 * 100 = 1000 10 * 1000 = 10000 ...

Akkor miért base16?

Nyilvánvaló, hogy egy tíz számjegyből álló rendszernek sok értelme van, ha az egész életedben ezt használta, és ez nagyon intuitív, tekintettel arra, hogy valamennyien két ujjjal születünk, akikre számíthatunk (a latin lakos digitus szó jelentése végül az „ujj”), és így szoktuk, hogy tízszeres többszörösét vegyük figyelembe öt csoportban.

A számítógépeken tárolt adatokkal kapcsolatban az ötszörös szorzói nem csak annyira hasznosak. Alapvetően egy számítógépes áramkör létezhet két állapot egyikében: ki vagy be, és így minden számítógépes kód alapvetően bináris (lat. Binarius „kettőből áll”). Az adatok lehető legkisebb csoportosítása egy bináris rendszerben egy bit (bináris számjegy), amelyeket bájtnak nevezett 8 csoportba lehet rendezni. Mivel egy bitnek két lehetséges értéke lehet (0 vagy 1), egy bájt 16 lehetséges állapotot tárolhat.

0 vagy 1 (2) 0 vagy 1 (4) 0 vagy 1 (6) 0 vagy 1 (8) 0 vagy 1 (10) 0 vagy 1 (12) 0 vagy 1 (14) 0 vagy 1 (16)

A 8 bit mindegyikének, amelyeknek 2 lehetséges állapota van, összesen 256 (2⁸) lehetséges kombináció létezik, amelyek egyetlen bájtban tárolhatók.

https://cs.stackexchange.com/questions/19568/how-can-one-byte-hold-256-possibilities

Ha ezeket a 256 lehetséges értéket egy tizedesrendszerre kívánja leképezni, akkor három számjegyre van szüksége.

Bináris tizedes tizedes 00000000 000 00000001 001 00000010 002 00000011 003 .... 01100011 009 .... 11111111 255

Tehát lehetséges, de mint a halak perjelzéssel történő számlálásának példája, ez nem a leghatékonyabb rendszer, ha alapegységünk egyetlen bájt. Egy base16 decimális rendszert használva reprezentálhatjuk egyetlen bájt bármely lehetséges bitkombinációját, csak 2 hexadecimális számjegy felhasználásával. Néhány további szimbólumot kell használniuk, mint a decimális rendszerben, de a hatékonyság, a skálázhatóság és az emberi olvashatóság érdekében megéri.

A hexadecimális számjegyek a következők:

0 1 2 3 4 5 6 7 8 9 ABCDEF

ahol

Dec Hex 0 = 0 1 = 1 2 = 2 3 = 3 4 = 4 5 = 5 6 = 6 7 = 7 8 = 8 9 = 9 10 = A 11 = B 12 = C 13 = D 14 = E 15 = F

Tehát a tizedes 10-et A betű lehet írni hexadecimálisan, megtakarítva egy számjegyű helyet. Amint elértük a hex F-nél nagyobb mennyiséget (dec. 15), el kell kezdenünk az 1-t és a helyőrző számot, 0-t.

December Hex 16 = 10

Most, ha egy 16-nál nagyobb mennyiséget szeretnénk képviselni, például 4-nél nagyobb, mint 16 (tizedesjegyben 20-at), akkor csak a 10-es és a 4-es számjeleket egyesítjük, hogy 14-es számot kapjunk.

Dec Hex 16 = 10 4 = 4
December Hex 20 = 14

Amint elértük a hexadecimális 1F-et (31 tizedes), csak megismételjük és növelik az első számjegyet egyszeresen.

Dec Hex ... 28 = 1D 29 = 1E 31 = 1F 32 = 20 33 = 21 34 = 22 ...

Ezt a mintát egészen a hex FF-ig követhetjük, ahol újra megkezdhetjük a mintát 10-gyel és egy extra 0: hex 100-tal (tizedes 256). Minden további 0 hozzáadása a jobb oldalhoz tízszeresére növeli az előzőt.

Hex dec. 10 * 1 = 10 16 * 1 = 16 10 * 10 = 100 16 * 16 = 256 10 * 100 = 1000 16 * 256 = 4096 10 * 1000 = 10000 16 * 4096 = 65536 10 * 1000 + 1 = 10001 16 * 4096 + 1 = 65536 ...

#Hozd őt haza

Tehát vissza a Marsra - ha az ábécé betűi helyett hexadecimális számokat használunk, Matt Damon karakter képes tízszerrel lecsökkentni a lehetséges számjegyek számát, amelyet a Földtől kaphat, és könnyebben felismerni a kamera helyzetét.

Ez a táblázat az oktálokat is tartalmazza.

A NASA által továbbított kódot egy ASCII táblázatból (balra) származtatjuk, amelyben az egyes hexadecimális értékek (piros színben) 0 és 7F között (0–127 tizedesjegyben) egy karakterre mutatnak. Az üzenet dekódolásához Watney-nak csak annyit kell tennie, hogy a hex értékeket megegyezzen a táblázatban szereplő ábécé betűivel.

48 4F 57 41 4C 49 56 45 HOGYAN

Amit lényegében csak egy számítógép végez, amikor adatokat olvas és továbbít.

Kiegészítő bónuszként, az összes, mindössze 7 bit által biztosított hely mellett az ASCII táblázat tartalmaz központozást (!), Így a NASA képes olyan kódvonalakat továbbítani, amelyek lehetővé teszik Watney számára, hogy a Pathfinder adóját csatlakoztassa a Mars Rover erősebb kommunikációs szoftveréhez. . Hexadecimális áldozatok.

Az eredeti ASCII (American Standard Code for Information Interchange) táblát az 1960-as években fejlesztették ki az Egyesült Államokban, és eredetileg csak 7 bitre volt szükség a tárolásához. A legtöbb modern szövegkódolás 8 bitet használ, de az eredeti kereten alapul, és így a rendszer még ma is használatban van. Még ha nem is programozó, kétségtelenül látott hexadecimálokat a böngészőjében egy URL-ben, például: http://www.example.com/this%20is%20an%20example

ahol a% 20 (hexa 20) az ASCII diagram [szóköz] karakteréhez térképez, mivel az URL-ek nem fogadhatnak el üres tereket és más karaktereket.

Egy másik hely, ahol már korábban is látott hexadecimálokat, az a színek kiválasztása bármely olyan szoftverben, amely lehetővé teszi az RGB-értékek színének testreszabását.

A jó napok.

Az RGB az elsődleges színeket jelenti: piros, kék és zöld. A számítás kezdeti napjaiban három bit (0 vagy 1) tárolhatja a 8 (3²) lehetséges színkombináció egyikének értékét, ahol 000 feketét hoz létre (nincs szín), 111 fehért ad (az összes szín kombinálva), és a a másik hat szín a közöttük lévő kombinációk eredményeként jön létre.

Az a tény, hogy a szín csak a fény hullámhossz-eltéréseit tükrözi, egy újabb blogbejegyzés.

A bitmélység 8 bájtra (24-bites) történő növelésével minden R, G vagy B színérték egyetlen bájtban 256 lehetséges szintet tárolhat, lehetővé téve 16,777,216 (2²⁴) szín elérését. Ez nyolc értelmetlen számjeggyel egészíti ki a decimális10, de a tizenhat plusz millió színkombináció mindegyike leírható emberi olvasható formátumban, mindössze 3 pár hexadecimális számjegy segítségével: Fekete = # 00000 Piros = # FF0000 Kék = # 00FF00 Zöld = # 0000FF Fehér = #FFFFFF

Általában szokás rövidíteni a számot, amikor két számjegy ismétlődik, tehát a sötét sárga # hexadecimális értéke # FC0 lehet.

Ez 16,763,904 a 10. számban, összehasonlítás céljából.

Remélhetőleg ez a bejegyzés a hexadecimálokat demisztifikálta számodra; Tudom, hogy ennek a témának a további kutatása miatt számításomat sokkal kevésbé tűnnek számomra a számítógépes tudományok - mindezt a 2015-ös Legjobb Komédia és / vagy Zenei győztes ihlette.