Mis kuusk?

Pean sellest natuke teadust tundma.

Marsi (2015) alguses on stseen, kus Matt Damoni tegelaskuju Mark Watney, keda ta meeskonnakaaslased arvatavasti surid ja pärast veidriktormi punasele planeedile jäid, elustab NASA-ga suhelnud Pathfinderi sondi. Ehkki sond suudab pilte Maale tagasi saata, on NASA parim, mida sondi abil eemalt teha saab, selle pardakaamera asukoha muutmine.

Watney mõistab, et kaamera 360-kraadine pöördenurk võimaldaks NASA meeskonnal talle sõnumeid tähthaaval edastada, kui ta suudab neile anda tähestiku, mis osutab sondi kaamerale. See lahendus on siiski veel üks probleem. Ladina tähestikul on inglise keeles 26 tähemärki, mis tähendab, et nad peavad olema sondi ümbritsevas ringis üsna lähestikku ja on väga tõenäoline, et tal on raske välja mõelda, millist tähte sond tähistama peab.

“See ei saa olla meie tähestik. 26 tähemärki pluss küsimustekaart 360-le annab meile 13 kaare kraadi. See on liiga kitsas. Ma ei oleks kunagi teadnud, mida kaamera osutas ... Kuueteistkümnendad appi. "

Niisiis lahendab Watney probleemi, kasutades kuueteistkümnendeid ja ASCII-tabelit NASA kodeeritud teadete dešifreerimiseks. Enne kui teate, on ta võimeline Maaga rääkima rohkemates küsimustes kui jah / ei.

Krediidid

…oota mida?

Kui teate tähti, hakkate teadma, et teete keerulist matemaatikat.

Ma tunnistan, et saan vaid vaevu aru, mis sellel stseenil sündis, kui filmi esimest korda nägin. Mõne üsna arenenud teadusliku kontseptsiooniga filmis torkas see stseen mulle silma, sest see tundus üsna lihtne idee, mis sellegipoolest ületas mu pea. Ilmselt oli režissöör Ridley Scottil raskusi selle stseeni kujutamisel, kuna ta ei mõistnud seda kontseptsiooni ise täielikult.

Õpin praegu programmeerimist ja olen aru saanud, et isegi kui kõrgema taseme keeli, nagu Ruby või Javascript, on keeruline omandada, on need siiski kaugel põhilisest masinkoodist, mis käivitab arvuteid puhtalt ühe ja 0-l . See madal programmeerimistase on mind alati hirmutanud ja see oli tõenäoliselt peamine põhjus, miks pool aastat tagasi, enne kui programmeerimisest sai kergemini ligipääsetavaks elukutseks, tekkis mul vähene huvi infotehnoloogia kui karjäärivaldkonna vastu. Kuid kuna ma asusin 6 nädalat tagasi arendajaks saamise teele, olen õppinud, et kui te vaid samm-sammult läbi proovite, saate iga keeruka tegevuse / kontseptsiooni hallatavaks jagada.

Alustame siis sõnaga kuueteistkümnendsüsteemiga. See tuleneb kreeka heksa tähendusest 6 ja kümnendmurrust, mis on tuletatud ladina kümnendist, mis tähendab kümnendat. Kuueteistkümnendarv on arvuline süsteem, mille alusena kasutatakse 16, mitte 10, nagu on tavaliste kümnendkohtade puhul.

Kui peaksite seletama baas10 numbrisüsteemi kellelegi, kes pole kunagi varem aritmeetikat teinud, peaksite esmalt selgitama, miks oli kasulik kasutada arvulist süsteemi. Lõppude lõpuks võiksime objektide koguste tähistamiseks lihtsalt kasutada lihtsat kaldkriipsu (“\”). Näiteks võib ühte kala tähistada kui kala, kahte kala kui kala, kolme kala kui kala ja nii edasi. Teoreetiliselt võiksite ükskõik millist kala kogust esindada, kasutades ainult ühte märki. Praktikas muutub see aga juhitamatuks, kui satud suures koguses kala. Isegi viiskümmend kala muutuvad ebaseaduslikult pikaks stringi kaldkriipsuks.

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\,,,,,,,,,,,,,,,,,,,,,,, kala
Kaladel pole lühiajalist mälumahtu, et neid paljudest ette mõelda, ja ka teil pole seda.

Kasutades kümnendsüsteemi kümnendsüsteemi abil, saame hõlpsalt esindada ülaltoodud kaldkriipsudega 1000 korda suuremat kalakogust, kasutades kümnendikku kalade arvust. Peame kasutama veel mõnda sümbolit kui üks lihtne kaldkriips, kuid tõhususe tasakaal on seda väärt. Tegelikult on see nii tõhus, et nende 50 kala ülaltoodud tähistamiseks oleks vaja ainult nende kahe sümboli kombinatsiooni.

Numbrid base10 süsteemis on:

0 1 2 3 4 5 6 7 8 9

kus

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

Seega võiks kala asemel kirjutada 4 kala, mis võtavad osa murdosa ruumist. Kui oleme jõudnud koguni, mis on suurem kui 9, peame alustama otsast 1 ja lisama kohahoidja numbriga 0.

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

Kui soovite esindada suuremat kogust kui 10, näiteks 4 on suurem kui 10, ühendame numbrid 10 ja 4 lihtsalt, et saada 14

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

Kui oleme jälle 9-ni jõudnud, kordame ja suurendame esimest numbrit ühe võrra.

...
17
18
19
20
21
...

Me võime seda mustrit järgida kuni 99-ni, mille järel saame mustrit uuesti alustada numbriga 10 ja täiendava 0: 100-ga. Nii et kümnendsüsteemis, mis põhineb 10-l, lisab iga parempoolne täiendav 0 arvu 10-kordselt. kui eelmine.

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

Miks siis base16?

Ilmselt on kümmet numbrit kasutaval süsteemil palju mõtet, kui olete kogu oma elu seda kasutanud, ja see on väga intuitiivne, kui arvestada, et me kõik oleme sündinud kahest viiest sõrmest koosnevate komplektidega, millele loota (sõna digitus ladina keeles tähendab "sõrm") ja seetõttu oleme harjunud kaaluma kümnekordseid viiel rühmal.

Arvutites salvestatud andmete osas pole viiekordsetest korrutised enam sama kasulikud. Põhimõtteliselt võib arvutiring olla kahes olekus: välja või välja lülitatud ja seega on kogu arvutikood põhimõtteliselt binaarne (lat. Binarius “koosneb kahest”). Binaarses süsteemis on võimalikult väike andmete rühmitus bitti (kahendarv), mis võib olla jaotatud 8-liikmelisse rühma, mida nimetatakse baitiks. Kuna ühel bitil võib olla kaks võimalikku väärtust (0 või 1), saab bait talletada 16 võimalikku olekut.

0 või 1 (2)
0 või 1 (4)
0 või 1 (6)
0 või 1 (8)
0 või 1 (10)
0 või 1 (12)
0 või 1 (14)
0 või 1 (16)

Kõigil neil 8 bitil, millel on 2 võimalikku olekut, on kokku 256 (2) võimalikku kombinatsiooni, mida saab salvestada ühes baitis.

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

Kui kaardistaksite need 256 võimalikku väärtust kümnendsüsteemiga, oleks teil vaja kolme numbrit.

Binaarne kümnendkoht
00000000 000
00000001 001
00000010 002
00000011 003
....
01100011 009
....
11111111 255

Nii et see on võimalik, kuid nagu kaldkriipsumärkidega kalade loendamise näitel, pole see kõige tõhusam süsteem, kui meie põhiline ühik on ühebaidine. Kasutades kümnendsüsteemi base16, saame ühe baiti võimalikku bitikombinatsiooni esindada ainult 2 kuueteistkümnendarvu kasutades. Peame kasutama veel mõnda sümbolit kui kümnendsüsteemis, kuid tõhususe, skaleeritavuse ja inimloetavuse huvides on see seda väärt.

Kuueteistkümnendarv on:

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

kus

Detsember 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

Nii et kümnendkoha täpsus 10-s võiks olla kirjutatud tähega A, salvestades numbrikoha. Kui oleme jõudnud arvuga, mis on suurem kui heksa F (kahanemine 15), peame alustama otsast 1 ja kohahoidja numbriga 0.

Detsember Hex
16 = 10

Nüüd, kui esindame suuremat kui 16, näiteks 4, mis on suurem kui 16 (20 kohta pärast koma), ühendame kuueteistkümnendarvud 10 ja 4, et saada heks 14.

Detsember Hex
16 = 10
 4 = 4
Detsember Hex
20 = 14

Kui oleme jõudnud helinani 1F (kümnendkoha täpsusega 31), kordame ja suurendame esimest numbrit ühe võrra.

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

Saame seda mustrit järgida kuni heksifunktsioonini (FF), kus saame mustrit uuesti alustada numbriga 10 ja lisaga 0: hex 100 (kümnendkoha täpsusega 256). Iga paremale lisatud 0 muudab arvu 16 korda suuremaks kui eelmine.

Kuus dets
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

Nii et tagasi Marsile - kasutades tähestiku tähtede asemel kuueteistkümnendeid, on Matt Damoni tegelane võimeline vähendama Maalt saadavate võimalike numbrite arvu 10 võrra ja hõlpsamini kaamera asukoha ära tundma.

Selles tabelis on ka kaheksajalad.

Kood, mille NASA edastab, tuleneb ASCII tabelist (vasakul), kus iga heksadeimaalne väärtus (punasega) vahemikus 0 kuni 7F (kümnendkoha täpsusega 0–127) kaardistab ühe tähemärgi. Sõnumi dekodeerimiseks peab Watney tegema vaid hex-väärtused tabeli tähestiku tähtedega.

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

Mis on põhimõtteliselt kõik, mida arvuti teeb, kui ta loeb ja väljastab andmeid.

Lisaboonusena, kus kogu ruumi mahutab vaid 7 bitti, sisaldab ASCII tabel ka kirjavahemärke (!), Nii et NASA on võimeline edastama koodiridu, mis võimaldavad Watney-l ühendada Pathfinderi saatja Marsruudi võimsama kommunikatsioonitarkvaraga . Hexadecimals appi.

Algne ASCII (American Standard Code for Information Interchange) tabel töötati välja USA-s 1960ndatel ja see nõudis algselt ainult 7 bitti salvestamist. Enamik tänapäevaseid tekstikodeeringuid kasutab 8 bitti, kuid põhineb algsel raamistikul ja seega on süsteem endiselt tänapäevani kasutusel. Isegi kui te pole programmeerija, olete kahtlemata näinud veebibrauseris kasutatavaid kuueteistkümnendeid URL-is, näiteks: http://www.example.com/this%20is%20an%20example

kus% 20 (kuueteistkümnendarv) kaardistab ASCII diagrammi tähemärgi [tühik], kuna URL-id ei saa tühje ruume ja muid märke vastu võtta.

Teine koht, kus olete varem kuueteistkümnendeid näinud, on värvide valimine mis tahes tarkvaras, mis võimaldab RGB väärtuste värvikohandamist.

Toredad päevad.

RGB tähistab põhivärve: punast, sinist ja rohelist. Arvutamise algusaegadel võisid kolm bitti (0 või 1) salvestada ühe kaheksast (3²) võimalikust värvikombinatsioonist ühe väärtuse, kus 000 loob musta (värvi pole), 111 annab teile valge (kõik värvid kombineeritud) ja ülejäänud kuus värvi tulenevad nendevahelistest kombinatsioonidest.

See, et värv on vaid valguse lainepikkuse erinevused, on järjekordse päeva blogipostitus.

Biti sügavuse suurendamisel 8 baitini (24-bitiseks) saab iga R-, G- või B-värviväärtus salvestada ühes baitis 256 võimalikku taset, võimaldades 16,777,216 (2²⁴) võimalikku värvi. See lisab kümnendkohani kuni kaheksa mõttetut numbrit, kuid kõiki neid kuueteistkümne pluss miljoni värvikombinatsiooni saab kirjeldada inimloetavas vormingus, kasutades vaid 3 paari kuueteistkümnendarvu:
Must = # 00000
Punane = # FF0000
Sinine = # 00FF00
Roheline = # 0000FF
Valge = #FFFFFF

Tavaliselt lühendatakse numbrit, kui kaks numbrit korduvad, nii et tumekollase # FFCC00 heksaväärtust saab kirjutada ka kui # FC0.

See on 16 763 904 koma10, võrdluseks.

Loodetavasti on see postitus teie jaoks kuueteistkümnendeid demüstifitseerinud; Ma tean, et selle teema edasine uurimine on muutnud infotehnoloogia minu jaoks palju vähem koormavaks - kõik on inspireeritud 2015. aasta parima komöödia ja / või muusikali võitjast.