zie ook rekenen met binair en hexadecimaal
voor een nieuwe opleiding moet ik kennis hebben van het binaire, decimale en hexadecimale stelsel. Ik kende de termen, maar ermee kunnen rekenen blijkt toch een heel ander verhaal te zijn.
Binaire stelsel
computers en andere digitale apparatuur kunnen, zoals
de meesten weten, alleen nullen en enen interpreteren. Het binaire
stelsel is dus 2 tallig. Het zit ingenieus in elkaar.
Alle talstelsels (decimaal, hexadecimaal, binair etc.) zijn positiestelsels. De waarde van een karakter in een getal wordt bepaald door de waarde van het karakter en de positie van het karakter in het getal (de plaats van het karakter).
Om berekeningen
eenvoudig te houden wordt vaak een rijtje van vier karakters (bits) gehanteerd (nibble). Twee van deze rijtjes vormen samen een byte.
Het begint met een rijtje van vier nullen:
0000
in het decimale stelsel (waarmee wij als mens gewend zijn te werken) betekent dit rijtje een 0
in het binaire stelsel wordt van rechts naar links gelezen, aan de linkerzijde komt er nu dus een 1 bij:
0001
in het decimale stelsel betekent dit rijtje een 1
om nu weer een 1 aan de rechterzijde toe te kunnen voegen, moet de eerste 1 een stapje naar voren (om ruimte te maken):
0010
dit rijtje betekent in het decimale stelsel een 2
nu is er ruimte gekomen voor de tweede 1 aan de rechterzijde:
0011
dit vormt een 3
er moet weer ruimte worden gemaakt voor de volgende 1:
0100
dit rijtje vormt een 4 (de tweede 1 is hier tijdelijk verdwenen, ezelsbruggetje: wanneer de linkse 1 een stap naar links gaat wordt deze daarna gevolgd door nullen)
0101
dit rijtje vormt een 5 (hier is de tweede 1 weer terug)
0110
dit rijtje vormt een 6
0111
dit rijtje vormt een 7
1000
de meest linkse 1 is weer een stap naar links gegaan en wordt dus weer gevolgd door nullen (zie het ezelsbruggetje), dit rijtje vormt een 8
1001
dit rijtje vormt een 9
1010
dit rijtje vormt een 10 (hoe kan het ook anders, twee tienen na elkaar)
1011
dit rijtje vormt een 11
1100
dit rijtje vormt een 12
1101
dit rijtje vormt een 13
1110
dit rijtje vormt een 14
1111
dit rijtje vormt een 15
je kunt nu niet verder want alle nullen zijn vervangen door enen.
Hexadecimale stelsel
Hexadecimaal blijkt 16 tallig te zijn. Dit talstelsel werkt met 16 karakters, maar omdat uitsluitend enkele karakters zijn toegestaan (10 bestaat al uit twee karakters, namelijk de 1 en de 0) hebben ze ooit wat verzonnen om na de 9 door te kunnen tellen tot 16. Het hexadecimale stelsel bestaat nu uit:
0 1 2 3 4 5 6 7 8 9 A B C D E F
0 = 0 in het decimale stelsel
1 = 1
2 = 2
3 = 3
4 = 4
5 = 5
6 = 6
7 = 7
8 = 8
9 = 9
A = 10
B = 11
C = 12
D = 13
E = 14
F = 15
Ik spreek liever van karakters, dan van cijfers en letters.
Na F komen we in de dubbele cijfers. Er komt een 1 voor te staan:
10 = 16
11 = 17
12 = 18
13 = 19
14 = 20
15 = 21
16 = 22
17 = 23
18 = 24
19 = 25
1a = 26 (zie de kleine letter a, in plaats van A)
1b = 27
1c = 28
1d = 29
1e = 30
1f = 31
ook nu kunnen we weer verder gaan, door de 1 te vervangen door een 2:
20 = 32
21 = 33
etc.
Op deze wijze kunnen we (met twee karakters) doorgaan tot maximaal FF, wat overeenkomt met 255 (decimaal stelsel).
Hexadecimaal wordt in digitale wereld veel gebruikt. Zo zie je het bijvoorbeeld terugkomen in hashwaarden, encryptiesleutels, HTML (kleurcodes) etc. Daarom wil ik wel iets weten over de toepassing van dit stelsel.
Samenhang Hexadecimaal en Binair stelsel
nu kun je zien dat er een overeenkomst bestaat tussen het hexadecimale en binaire stelsel, ze hebben allebei namelijk zestien mogelijkheden.
0 = 0000
1 = 0001
2 = 0010
3 = 0011
4 = 0100
5 = 0101
6 = 0110
7 = 0111
8 = 1000
9 = 1001
A = 1010
B = 1011
C = 1100
D = 1101
E = 1110
F = 1111
Om duidelijk te zien wat de status van een bit is wordt in het binaire stelsel aangevuld totdat er acht karakters te zien zijn. De bovenstaande nibbles (4 karakters) worden aangevuld met voorloopnullen, totdat er acht karakters te zien zijn. Als we dat hebben gedaan kunnen we verder tellen met hexadecimale karakters:
10 = 0001 0000 (komt in het decimale stelsel overeen met het getal 16)
11 = 0001 0001 (17)
12 = 0001 0010 (18)
13 = 0001 0011 (19)
14 = 0001 0100 (20)
etc.
Zo kunnen we doorgaan tot FF (hexadecimaal), hetgeen overeenkomt met 1111 1111 (binair) en 255 (decimale stelsel). Niet voor niets is 255 vaak het maximale getal (bijvoorbeeld in een IP adres).
Waarom bestaan er eigenlijk verschillende stelsels. In de digitale wereld is dat gedaan om een tussenstap te maken van het digitale binaire stelsel naar een voor mensen begrijpelijk stelsel.
Voorbeeld: 11000101011000100101110101110010 is voor ons niet leesbaar. Om er iets begrijpelijks van te maken verdelen we het, zoals genoemd, eerst in nibbles (vier karakters). We krijgen dan:
1100 0101 0110 0010 0101 1101 0111 0010
Nu kunnen we er iets begrijpelijks van maken door de nibbles om te zetten naar een hexadecimaal karakter:
C5625D72
We zorgen er op deze manier voor dat wij een begrijpelijk, overzichtelijk (en wellicht te onthouden) rijtje te zien krijgen.
Hexadecimaal wordt gebruikt voor o.a.:
kleurcodes in HTML (wit is bijvoorbeeld FFFFFF en zwart is bijvoorbeeld 000000)
MAC - adres van een netwerkkaart (bijvoorbeeld 01:AF:2E:A1:32:A9)
IP adres (bijvoorbeeld 147.22.108.74)
Zoals je in bovenstaande overzichten kunt zien is het redelijk eenvoudig om hexadecimaal in binair om te zetten en andersom: een hexadecimaal cijfer komt overeen met 4 binaire karakters. Binaire getallen zijn naar hexadecimale om te zetten door steeds vier bits (twee nibbles) samen te nemen (voorbeeld: 7E = 0111 1110).
Overigens wordt in het hexadecimale stelsel ook gebruik gemaakt van een voorloopnul, in het geval dat een code anders minder duidelijk zou zijn als er geen nul voor zou staan.
ASCII
Met behulp van de stelsels kunnen we tekens maken. Een computer maakt hiervoor vaak gebruik van ASCII (American Standard Code for Information Interchange) codes. Een ander principe waarmee tegenwoordig tekens worden samengesteld is Unicode, dat een uitbreiding van ASCII is.
Een ASCII-code bestaat uit 7 of 8 bits, en kan gepresenteerd worden met twee hexadecimale cijfers:
A = 41
B = 42
C = 43
D = 44
E = 45
F = 46
etc.
De standaard ASCII-tabel bestaat uit twee delen: de 95 zichtbare tekens (hoofd- en kleine letters, cijfers, leestekens, de spatie en enkele andere symbolen), en stuurcodes (bijvoorbeeld LF, CR etc.). Deze codes vormen geen zichtbare tekens, maar zijn opdrachten aan bijvoorbeeld printers of geven informatie over de data die verstuurd wordt.
Rekenen
Aan het rekenen met de verschillende stelsels moet ik nog een andere posting wijden. Gelukkig hoef je niet alles uit je hoofd te weten, want zowel Windows als Linux (KDE, Gnome etc.) bieden standaard een rekenmachine, waarmee eenvoudig berekeningen kunnen worden uitgevoerd tussen binaire, hexadecimale, decimale en andere stelsels (je moet de rekenmachine wel even via Beeld > Wetenschappelijk omzetten naar de juiste module).
Meer informatie
wil je meer over dit onderwerp weten, dan raad ik je dit boek aan:
Nullen en Enen / druk 1
Ruud Jeurissen & Loek van den Broek
Binaire getallen bestaan uit nullen en enen. Dat zijn de getallen die
een computer kan 'begrijpen'. De uiteenzetting over het tientallig
stelsel, het octale stelsel en het binaire stelsel, is grondiger dan
andere inleidingen hierover.
klik hier voor meer aanbevolen boeken
Niet alle talstelsels zijn positioneel .. Bvb Romeins talstelsel
Posted by: nick | December 19, 2011 at 09:22 AM