Što je Hex?

Morat ću naučiti malo od ovoga.

U Marsianu (2015) postoji scena u kojoj je lik Matt Damon-a Mark Watney, kojeg su njegovi kolege iz posade pretrpili i nasukao se na crvenom planetu nakon navale oluje, reanimira pokvarenu sondu Pathfinder radi komunikacije s NASA-om. Iako je sonda sposobna poslati slike na Zemlju, najbolje što NASA može učiniti sa sondom na daljinu je promjena položaja njegove ugrađene kamere.

Watney shvaća da bi 360 stupnjeva rotacije kamere omogućilo NASA-inoj ekipi da mu piše pismo po pismo, ako im on može pružiti abecedu na koju će usmjeriti kameru sonde. Ipak, to rješenje predstavlja još jedan problem. Latinska abeceda ima 26 znakova na engleskom, što znači da će morati biti prilično blizu jedan u krugu oko sonde, a velika je vjerovatnoća da će on imati poteškoća u razabiranju na koje slovo bi trebala biti označena sonda.

"To ne može biti naša abeceda. 26 znakova plus karta pitanja na 360 daje 13 stupnjeva luka. To je preusko Nikad nisam znao na što je kamera ukazala ... Šesterokutni lijekovi u pomoć. "

Umjesto toga, Watney rješava problem pomoću heksadecimala i ASCII tablice za dešifriranje kodiranih poruka NASA-e, a prije nego što to shvatite, on može razgovarati sa Zemljom u više nego samo da / nema pitanja.

Roll kredite

…Čekaj, što?

Znate da se bavite složenom matematikom kada počnete koristiti slova.

Priznat ću da jedva razumijem što se dogodilo u ovoj sceni prvi put kad sam vidio film. U filmu s nekim prilično naprednim znanstvenim konceptima, ovaj prizor mi je zapeo za glavu jer mi se činila kao prilično jednostavna ideja koja mi je ipak prešla preko glave. Očito je redatelj Ridley Scott imao poteškoća u prikazivanju ove scene jer sam nije u potpunosti shvatio koncept.

Trenutno učim programiranje i shvatio sam da čak i ako jezici više razine poput Ruby ili Javascript mogu biti naporni za svladavanje, još uvijek su prilično udaljeni od osnovnog strojnog koda koji napaja računala isključivo na temelju oznaka 1 i 0 , Ta niska razina programiranja oduvijek me je zastrašila i vjerojatno je to bio glavni razlog što sam prije pola života malo zanimao informatiku kao polje karijere, prije nego što je programiranje postalo pristupačnija profesija. Ali otkad sam prije 6 tjedana krenuo putem prema tome da postanem programer, naučio sam da možete slomiti bilo koju složenu radnju / koncept do upravljive veličine ako samo malo prođete kroz njega.

Pa krenimo od riječi heksadecimalno. Potječe iz grčkog hex koji znači 6 i decimalnog, što je izvedeno iz latinskog decimusa, što znači deseti. Šesterokutni su numerički sustav koji koristi 16 kao svoju bazu, umjesto 10, kao što je slučaj s „normalnim“ decimalnim brojevima.

Ako biste trebali objasniti osnovni sustav brojeva nekome tko nikada prije nije radio aritmetiku, prvo biste trebali objasniti zašto je bilo korisno uopće koristiti brojčani sustav. Uostalom, jednostavno možemo upotrijebiti jednostavnu kosu crtu ("\") za označavanje količina predmeta. Na primjer, jedna riba može biti predstavljena kao \ riba, dvije ribe kao \\ riba, tri ribe kao \\\ riba i tako dalje. Teoretski, možete predstaviti bilo koju količinu ribe koristeći samo jedan znak. U praksi, međutim, to postaje neizvedljivo kada naiđete na velike količine ribe. Čak pedeset riba postaje neprobavljivo dugačka kosa reza.

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ riba
Ribe nemaju kratkotrajno pamćenje da bi to mogle zamisliti, a ni vi.

Koristeći decimalni sustav base10, vrlo lako možemo predstaviti količinu ribe 1000 puta veću od gornje crte, koristeći desetinu broja \ 's. Morat ćemo upotrijebiti još nekoliko simbola od one jednostavne crte, ali kompromis učinkovitosti je vrijedan toga. U stvari je toliko učinkovita da će nam trebati samo kombinacija dvaju ovih simbola da bismo mogli predstaviti tih 50 riba gore.

Znamenke u sustavu base10 su:

0 1 2 3 4 5 6 7 8 9

gdje

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

Dakle, \\\\ riba bi se umjesto toga mogla napisati kao 4 ribe, zauzimajući dio prostora. Nakon što postignemo količinu veću od 9, moramo započeti ispočetka s 1 i dodati broj rezervi mjesta, 0.

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

Sada, da predstavljamo količinu veću od 10, kao što je 4 veća od 10, samo kombiniramo znamenke 10 i 4 da napravimo 14

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

Nakon što ponovno dosegnemo 9, samo ponavljamo i povećavamo prvu znamenku za jednom.

...
17
18
19
20
21
...

Možemo slijediti ovaj obrazac sve do 99, pri čemu možemo ponovno započeti uzorak s 10 i dodatnim 0: 100. Dakle, u decimalnom sustavu koji se temelji na 10 svaki dodatni 0 dodan udesno čini broj 10 puta veći nego prethodni.

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

Pa zašto baza16?

Očito da sustav koji koristi deset znamenki ima puno smisla ako ste ga koristili cijeli život, i vrlo je intuitivno s obzirom na to da smo svi rođeni s dva niza od pet prstiju na koje računamo (riječ digitus na latinskom znači 'prst', na kraju krajeva), i tako smo navikli razmatrati množine deset u skupinama od pet.

Kada su u pitanju podaci pohranjeni na računalima, množine 5 nisu ni približno korisne. U osnovi, računalni krug može postojati u jednom od dva stanja: isključeno ili uključeno, pa je sav računalni kôd u osnovi binarni (lat. Binarius „sastoji se od dva“). Najmanja skupina podataka koja je moguća u binarnom sustavu je malo (binarna znamenka), koji se mogu organizirati u skupinu od 8 naziva bajt. Budući da jedan bit može imati dvije moguće vrijednosti (0 ili 1), bajt može pohraniti 16 mogućih stanja.

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

Sa svakim od tih 8 bita koji imaju 2 moguća stanja, postoji ukupno 256 (2⁸) mogućih kombinacija koje se mogu pohraniti u jedan bajt.

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

Ako biste tih 256 mogućih vrijednosti preslikali u decimalni sustav, potrebne su vam tri znamenke.

Binarno decimalno
00000000 000
00000001 001
00000010 002
00000011 003
....
01100011 009
....
11111111 255

Dakle, moguće je, ali kao na primjeru brojanja ribe s crtama, to nije najučinkovitiji sustav ako je naša osnovna jedinica jedan bajt. Koristeći decimalni sustav base16, možemo predstaviti bilo koju moguću kombinaciju bita jednog bajta koristeći samo dvije heksadecimalne znamenke. Morat ćemo upotrijebiti još nekoliko simbola nego u decimalnom sustavu, ali u svrhu učinkovitosti i skalabilnosti i ljudske razumljivosti vrijedi.

Šesterokutne znamenke su:

0 1 2 3 4 5 6 7 8 9 A B C D E F

gdje

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

Znači 10 u decimalnom obliku može se zapisati kao heksadecimalno, čime se sprema znamenka. Nakon što postignemo količinu veću od heks F (dec 15), moramo početi ispočetka s 1 i znamenkom rezervi mjesta, 0.

Dec Hex
16 = 10

Sada, da predstavljamo količinu veću od 16, kao što su 4 veće od 16 (20 u decimalnom obliku), samo kombiniramo šesterokutne znamenke 10 i 4 kako bismo napravili heks 14.

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

Kad dosegnemo hex 1F (31 u decimalnom obliku), samo ponavljamo i povećavamo prvu znamenku za jednu.

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

Možemo slijediti ovaj obrazac sve do šesterokutnog FF-a, pri čemu možemo ponovno započeti uzorak s 10 i dodatnim 0: hex 100 (256 u decimalnom obliku). Svakih dodatnih 0 dodanih desno čini broj 16 puta većim od prethodnog.

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
...

#bringhimhome

Tako natrag na Mars - pomoću heksadecimalnih slova umjesto slova abecede, lik Matt Damon-a može smanjiti broj mogućih znamenki koje može dobiti sa Zemlje za 10 i lakše prepoznati položaj kamere.

Ovaj grafikon također uključuje oktale.

Kôd koji NASA prenosi dobiva se iz tablice ASCII (slijeva), u kojoj se svaka šesterokutna vrijednost (u crvenoj boji) između 0 i 7F (0–127 u decimalnom obliku) preslikava u jedan znak. Da bi dekodirao poruku, sve što Watney mora učiniti jest uskladiti heksačke vrijednosti sa slovima abecede u tablici.

48 4F 57 41 4C 49 56 45
H O W A L I V E

Što je u biti sve što računalo radi kad čita i šalje podatke.

Kao dodatni bonus, uz sav prostor koji mu nudi samo 7 bita, ASCII tablica uključuje i interpunkcijske znakove (!), Tako da NASA može prenijeti retke koda koji Watneyu omogućuju da poveže Pathfinder-ov odašiljač s moćnijim komunikacijskim softverom kompanije Mars Rover , Šesterokutni lijekovi za spašavanje.

Izvorna tablica ASCII (Američki standardni kod za razmjenu informacija) razvijena je u SAD-u 1960-ih i za spremanje joj je prvotno bilo potrebno samo 7 bita. Većina modernog kodiranja teksta koristi 8 bita, ali temelji se na izvornom okviru, pa je sustav i danas u upotrebi. Čak i ako niste programer, bez sumnje ste vidjeli da se heksadecimals koriste u vašem web pregledniku u URL-u kao što je: http://www.example.com/this%20is%20an%20example

gdje se% 20 (hex 20) mapira na znak [razmak] u ASCII grafikonu, jer URL-ovi ne mogu prihvatiti prazne prostore i druge znakove.

Drugo mjesto na kojem ćete prije viđati heksadecimale jest odabir boja u bilo kojem softveru koji omogućava prilagođavanje boja RGB vrijednosti u boji.

Dobri dani.

RGB označava osnovne boje: crvenu, plavu i zelenu. U ranim danima računanja, tri bita (0 ili 1) mogu pohraniti vrijednost jedne od 8 (3²) mogućih kombinacija boja, gdje 000 stvara crnu (bez boje), 111 daje bijelu (sve boje u kombinaciji), a ostalih šest boja rezultat je kombinacija između.

Činjenica da su boje samo odstupanja valne duljine u svjetlu, blog je za drugi dan.

Povećavanjem dubine bita na 8 bajtova (24-bitni) svaka vrijednost boja R, G ili B može pohraniti 256 mogućih razina u jedan bajt, omogućujući 16,777,216 (2 ²) moguće boje. To dodaje do osam besmislenih znamenki u decimalnom broju 10, ali svaka od tih šestnaest plus kombinacija boja može se opisati u ljudskom čitljivom formatu koristeći samo 3 para heksadecimalnih znamenki:
Crna = # 00000
Crvena = # FF0000
Plava = # 00FF00
Zelena = # 0000FF
Bijela = #FFFFFF

Uobičajeno je skraćivanje broja kad se ponavljaju dvije znamenke, pa se šesterokutna vrijednost za tamno žutu # FFCC00 može napisati i kao # FC0.

To je 16,763,904 u decimalnom10 za usporedbu.

Nadam se da je ovaj post za vas demistificirao šesterokut; Znam da se daljnjim istraživanjem ove teme računarstvo čini puno manje neodoljivim, a sve inspirirano pobjednikom 2015. za najbolju komediju i / ili mjuzikl.