(Als_je_meer_tijd_hebt)
Sinds ik Zyte heb gedownload, een app voor Android/iOS/windows/... Lees ik veel meer artikels dan vroeger.
Aan iedereen die Zyte niet heeft of kent, ik raad het je zeker aan want je kan je categorieën kiezen. En er staan altijd interessante artikels in. Zo las ik overlaatst een artikel over waarom wiskunde belangrijk is voor een programmeur. Deze tutorial gaat niet over dat hoofdstuk, maar het heeft me toch wel ietwat beïnvloed.
Uiteindelijk, wanneer je programmeert zul je tijdens ervaring wel stilletjes aan beginnen doorhebben dat wiskunde gewoonweg belangrijk is en je er niet onderuit kan. Dat kan je tegengaan met "Ik ben slecht in wiskunde, maar ik kan redelijk goed programmeren...". Ja, dat is waar, je hoeft geen wiskundeknobbel te zijn om een goede programmeur te zijn.
Maar wiskundig inzicht, wiskundig denken, redeneren, verbeterd alleen maar je vaardigheden. Je gaat bepaalde dingen heel anders beginnen zien, programmeren, ...
Maar goed, lets go on topic.
Sommigen onder jullie weten misschien al dat ik bezig met een nieuwe versie van mn Chart class.
Nu, er is een gedeelte waarin ik i.p.v. decimale getallen, met hexadecimale getallen moet werken. En sinds ik dat artikel heb gelezen, probeer ik ook zoveel mogelijk wiskundig te programmeren. Het is training, en vergroot je begrip over bepaalde zaken (zoals in dit geval een 16-delig stelsel).
Er zijn PHP-functies, Javascript-functies, ... die gemakkelijk decimaal naar hexadecimaal converteren, maar wat leer je daar uit ? Daarom heb ik besloten om zelf een converter trachten te maken.
Aan iedereen die Zyte niet heeft of kent, ik raad het je zeker aan want je kan je categorieën kiezen. En er staan altijd interessante artikels in. Zo las ik overlaatst een artikel over waarom wiskunde belangrijk is voor een programmeur. Deze tutorial gaat niet over dat hoofdstuk, maar het heeft me toch wel ietwat beïnvloed.
Uiteindelijk, wanneer je programmeert zul je tijdens ervaring wel stilletjes aan beginnen doorhebben dat wiskunde gewoonweg belangrijk is en je er niet onderuit kan. Dat kan je tegengaan met "Ik ben slecht in wiskunde, maar ik kan redelijk goed programmeren...". Ja, dat is waar, je hoeft geen wiskundeknobbel te zijn om een goede programmeur te zijn.
Maar wiskundig inzicht, wiskundig denken, redeneren, verbeterd alleen maar je vaardigheden. Je gaat bepaalde dingen heel anders beginnen zien, programmeren, ...
Maar goed, lets go on topic.
Sommigen onder jullie weten misschien al dat ik bezig met een nieuwe versie van mn Chart class.
Nu, er is een gedeelte waarin ik i.p.v. decimale getallen, met hexadecimale getallen moet werken. En sinds ik dat artikel heb gelezen, probeer ik ook zoveel mogelijk wiskundig te programmeren. Het is training, en vergroot je begrip over bepaalde zaken (zoals in dit geval een 16-delig stelsel).
Er zijn PHP-functies, Javascript-functies, ... die gemakkelijk decimaal naar hexadecimaal converteren, maar wat leer je daar uit ? Daarom heb ik besloten om zelf een converter trachten te maken.
Ieder onder jullie kent al dan niet bewust het decimaal stelsel. Je werkt er dagelijks mee.
Het decimaal stelsel is 10-delig, wat simpel uitgelegd wil zeggen dat je 10-tekens hebt waarmee je decimale getallen kan vormen (0-9). vb 1056, 63545, 54654... Zijn allemaal decimale getallen...
Het hexadecimale of 16-delig stelsel, gebruikt 16-tekens. (0-9) & (A-F). Het hexadecimaal stelsel wordt vooral gebruik computer wetenschappen. Het is veel simpeler & korter om binaire getallen om te zetten naar hexadecimaalgetallen, dan naar decimale getallen. Maar daar ga ik niet veel over. (Google is je vriend indien je meer wilt weten daarover).
Laten we beginnen met het echte werk. Dus we weten dat je in het hexadecimaal stelsel 16-tekens hebt, om decimaal naar hexadecimaal om te zetten, moeten we dus deze tekens vergelijken.
[DECIMAAL], [HEXADECIMAAL]
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
Ok, nu weten welke tekens er binnen het 16-delig stelsel bestaan en wat de decimale waarde ervan is. Maar hoe bereken je nu de hexadecimale waarde vanuit een decimaal getal ?
Ik ben relatief slecht in het uitleggen van wiskunde, maar ik ga het zo goedmogelijk proberen uit te leggen.
Het is een 16-delig stelsel.
Dus wat we eigenlijk moeten doen is gaan bepalen tot welke macht van 16 we ons decimaal door kunnen delen. Dan moeten we telkens ons decimaal getal verminderen met de vermenigvuldiging van onze macht van 16, met het aantal keer we deze door ons decimaal getal kunnen delen.
Ik weet het, ik snap mezelf al zover niet. Dus ga ik het proberen uit te leggen a.d.h.v. een voorbeeld.
Neem nu dat we decimaal getal 12 398 willen omzetten.
Dus kijken we door welke hoogste macht van 16 dat getal gedeeld kan worden.
16^1 => 16
16^2 => 256
16^3 => 4096
16^4 => 65536
Hieruit kunnen we afleiden dat 16³ de hoogst mogelijke macht is, want 16^4 levert een getal onder de 1 op.
Dus nu gaan we kijken hoeveel keer deze macht in ons decimaal getal past.
12398/4096 = 3.02685546875 <=> 3
Dus 16³ past ca 3x in 12398.
Dus moeten we 12 398 verminderen met 3x16³.
12398 - 3*16³ = 110
Er blijft nog 110 over, dus doen we de bovenstaande procedure gewoonweg opnieuw.
16² of 256 is te groot om 110 door te delen.
Dus moeten we 16^1 (of gewoonweg 16) gebruiken. Maar net zoals in een coëfficiënten rij, moet je de 0-waarden v/d machten er ook tussenplaatsen.
Dus 110/0*16² = 110
110/16 = 6.875 <=> 6
110-(6*16) = 14.
Onze rest is dus 14, en kan niet meer gedeeld worden door een macht van 16.
Het moeilijkste is dus achter de rug nu.
We hebben dus 3x16³, 0x16², 6x16 en 14 als rest.
Die getallen hebben we nodig. (3, 0, 6 & 14).
Nu is het simpel, alle getallen boven 9 moeten door een letter worden vervangen. (Een letter die in hexadecimaalstelsel gelijk is aan het cijfer uit het decimaal stelsel).
Dat is in dit geval enkel 14. 14 => E.
Daar is het, we hebben onze hex.
306E.
Ik hoop dat je dit een beetje snapte, het lijkt moeilijk, maar het is relatief echt simpel.
2. Toepassen in javascript.
Het was eigenlijk de bedoeling om er een javascript tutorial over te maken hoe we met deze kennis een converter konden maken, maar met dat ik ietwat heb afgeweken is het al te laat en ik zou graag nog wat anders doen. Ik zal morgen (indien ik tijd heb) deze tutorial verder zetten.
Indien er nu al vragen zijn stel ze gerust. Maar ik vraag je wel op voorhand om eerst zelf onderzoek te doen voor je vragen stelt.
Als er foutjes instaan mag je ze gerust melden, ik typ er ook maar wat op los dusja ...


