Een getal bestaat uit cijfers die op bepaalde posities staan. Het is handig om die posities te nummeren van rechts naar links, te beginnen met 0.
Voorbeeld: Het getal 352 heeft drie cijfers, met op positie nul een 2, op posisite één een 5, en op positie twee een 3.
Om te bepalen wat de waarde van dit getal is in het tien tallig stelsel kan je de volgende som uitvoeren:
2*10^0 + 5*10^1 + 3*10^2 = 352 in het tientallig stelsel (goh..)
Je ziet dat de cijfers terug komen als factoren in de som, en de posities waarop die cijfers staan gebruikt worden als exponenten. De tien van het tientallig stelsel komt terug in de grondtallen.
Om de waarde van hetzelfde getal in een achttallig stelsel te bepalen krijg je deze som:
2*8^0 + 5*8^1 + 3*8^2 = 234 in het tientallig stelsel
Nu jouw som:
Je binaire getal heeft acht posities. De cijfers op die posities vul je dus van links naar rechts in: 0*2^0 + 1* 2^1 + 1*2^2 + 0* 2^3 + 0*2^4 + 1* 2^5 + 0*2^6 + 1* 2^7 = 166
Voor het omrekenen naar een octaal getal is er misschien een eenvoudigere methode, maar dit werkt in elk geval:
Eerst kijken naar de grootste macht van acht die in het getal past: 8^3=512, 8^2=64. Dat is dus 64, dus je getal heeft drie cijfers.
Dan kijken hoevaak 64 in 301 past: 4*64=256, 5*64=320 (dus positie twee is 4)
301-256=45
Weer kijken naar de grootste macht van acht die in het nieuwe getal (in dit geval 45) past: 8^2=64, 8^1=8
8*5=40, 8*6=48. (dus postie één is 5)
45-40=5
Weer kijken naar de grootste macht van acht die in het nieuwe getal (in dit geval 5) past:
8^1=8, 8^0=1
1*5=5 (dus postie nul is 5)
Resultaat: 301 in tientallig stelsel = 455 in achttallig stelsel
Wacht, één ding is me toch nog niet helemaal duidelijk. Wat heeft het feit dat die 301 is geschreven in een tientallig stelsel, dan precies van invloed op de berekening? Want die 10 staat er vast niet voor niets.
Wat je meestal doet is je getallen eerst omrekenen naar het tientallig stelsel omdat we zelf gewend zijn in dat stelsel te rekenen. Als 301 geschreven was in het twaalftallig stelsel bij wijze van spreke, dan zou je eerst
1*12^0 + 0*12^1 + 3*12^2 = "433 in het tientallig stelsel" hebben gedaan.
Maar omdat het al in tientallig stond is dat niet nodig.
1*10^0 + 0*10^1 + 3*10^2 = 301
Andere leuke tip: zowel acht als zestien zijn machten van twee, en die kennis kan je gebruiken om gemakkelijk van binair naar octaal naar hexadecimaal te gaan. Zie hieronder:
Het binaire getal 111101110110110011100 is dus redelijk makkelijk om te zetten naar hexadecimaal door het getal in groepen van vier te verdelen en de bijbehorende waarden te pakken:
0001 1110 1110 1101 1001 1100 = 1EED9C
Voor octaal verdeel je het binaire getal in groepen van drie:
111 101 110 110 110 011 100 = 7566634
Spoiler want vaag omschreven, maar misschien wel leuk:
Spoiler
In het algemeen geldt het volgende: om van een getal p in radix n naar hetzelfde getal in radix m te gaan kan je floor(p / m) gebruiken voor de getallen en vervolgens recursief floor((p mod m) / m) toepassen zolang geldt dat p >= m. Als p < m, dan is het resultaat altijd p (uitgedrukt in de radix van m).
Hrm, beetje vaag omschreven, maar je kunt dus gebruik maken van quotiënten om van van een willekeurige radix naar een andere te gaan.
Volgens mij ontbreekt er ergens nog iets in de formule uit de spoiler, want van n maak je nergens gebruik. Zou je het voorbeeld (301 van tientallig naar octaal) eens kunnen voordoen?
Ik kwam tot hier:
p=301, n=10, m=8
floor(p / m) = floor(301 / 8) = 37
floor(floor(301 / 8) / 8) = 4
Dan heb je het eerste getal. Maar hoe ga je nu zonder quotiënten aan de volgende waarden komen?
Ik zou dan doen:
301-4*8*8=45
floor(45/ 8) = 5
45-5*8=5
Maar dan is niet meer met quotiënten.