Mis kuusnurk?

Pean sellest natuke teadust tundma.

Marsi (2015) alguses on stseen, kus Matt Damoni tegelaskuju Mark Watney, keda ta meeskonnakaaslased eeldasid surnuna ja pärast äikest tormi punasele planeedile sattunud, elustavad taaskäivitatud Pathfinderi sondi, et suhelda NASA-ga. 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 tähthaaval sõnumeid edastada, kui ta suudab neile anda tähestiku, et sondi kaamerat suunata. See lahendus on siiski teine ​​probleem. Ladina tähestikus on inglise keeles 26 tähemärki, mis tähendab, et nad peavad olema sondi ümbritsevas ringis üsna lähestikku ning on väga tõenäoline, et tal on raske välja selgitada, 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, suudab ta Maaga rääkida rohkem kui lihtsalt jah / ei küsimuses.

Krediidid

…oota mida?

Kui teate tähti, siis teete keerulist matemaatikat.

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 sellest hoolimata ületas mu pea. Ilmselt oli režissöör Ridley Scottil raskusi selle stseeni kujutamisel, kuna ta ei mõistnud kontseptsiooni ise täielikult.

Õpin praegu programmeerimist ja olen aru saanud, et isegi kui kõrgema taseme keeli, nagu näiteks Ruby või Javascript, on keeruline omandada, on need siiski kaugel põhilisest masinkoodist, mis käivitab arvutid 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 võite murda mis tahes keerulised toimingud / kontseptsioonid hallatavaks suuruseks, kui te neid lihtsalt tükilt läbi vaatate.

Alustame siis sõnaga kuueteistkümnendsüsteemiga. See on tuletatud kreeka heksa tähendusest 6 ja kümnendmurrust, mis tuletatakse ladina detsimuses, 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 isegi 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 suvalist kala kogust esindada ainult ühe tähemärgi abil. Praktikas muutub see aga juhitamatuks, kui satud suures koguses kala. Isegi viiskümmend kala muutuvad ebaseaduslikult pikaks nööriks.

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

Kasutades kümnendsüsteemi kümnendiku 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 meil oleks vaja ainult nende kahe sümboli kombinatsiooni, et esindada neid 50 kala ülal.

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 kirjutada selle asemel 4 kalana, 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 = 4

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 lisa 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 5-st kordsed peaaegu nii 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ümnendkoha täpsusega 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äite puhul, pole see kõige tõhusam süsteem, kui meie põhiühik on üks bait. 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 efektiivsuse, skaleeritavuse ja inimloetavuse huvides on see seda väärt.

Kuueteistkümnendarv on:

0 1 2 3 4 5 6 7 8 9 ABCDEF

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 kümnendkohani võiks olla kirjutatud tähega A, salvestades numbrikoha. Kui oleme jõudnud enam kui heksa F (kahanemine 15), peame alustama otsast 1 ja kohahoidjaga 0-ga.

Detsember Hex 16 = 10

Nüüd, esindamaks suurust, mis on suurem kui 16, näiteks 4, mis on suurem kui 16 (20 kohta pärast koma), ühendame kuusnurga numbrite 10 ja 4 lihtsalt, 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 kuusnurk ... 28 = 1D 29 = 1E 31 = 1F 32 = 20 33 = 21 34 = 22 ...

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

Hex detsember 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 tundma kaamera asukohta.

See tabel sisaldab ka kaheksajalad.

Kood, mille NASA edastab, tuletatakse 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 HOWALIVE

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 Interfaction) 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 nagu: http://www.example.com/this%20is%20an%20example

kus% 20 (hex 20) 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 juba ühe 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ümnendikus kuni kaheksa mõttetut numbrit, kuid kõiki neist kuueteistkümnest pluss miljonist värvikombinatsioonist saab inimese loetavas vormingus kirjeldada 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.