Talstelsels 1 Algemeenheden Digitale systemen werken met nullen en enen omdat dit elektronisch gemakkelijke te verwezenlijken is. De transistor kent enkel twee toestanden (geleiden of sperren) Hierdoor zijn de circuits gemakkelijke te bouwen en is de kans op fouten kleiner. Zo zal bij TTL logica alle spanningen tussen 0 en 0,8V aanzien worden als een ‘0” en alle spanningen tussen 2,1V en 5V aanzien worden als een “1”. Er is dus een marge van 0,8V voor de lage niveau’s en 2,9V voor de hoge niveau’s. Bovendien is er een scheidingsgebied van 1,3V (verbodnen zone) tussen laag en hoog. Als mens zijn we vooral ingesteld op het lezen en interpreteren van cijfermateriaal in decimale vorm. Numerieke informatie die we aan de computer willen meedelen moeten we dus eerst omzetten naar binaire informatie. Anderzijds verwachten we van de computer of van het rekenapparaat dat het resultaat van de uitgevoerde bewerkingen op de binaire getallen in een decimale vorm wordt meegedeeld. Zowel aan de in- als aan de uitgang van een digitaal systeem moet een omzetting of conversie gebeuren tussen het binair en het decimaal talstelsel. We nemen als voorbeeld een computersysteem. 1 1) 2) 3) 4) 5) 2 3 4 5 Keyboard. Encoder Computer Decoder Display Een schakeling, encoder genoemd, zet de ingevoerde decimale informatie om in nullen en enen die door het digitale systeem kunnen verwerkt worden. Het resultaat van deze bewerking is een binair getal. Een tweede schakeling, decoder genoemd, zorgt voor de omzetting van een binair getal naar een decimaal getal dat dan bijvoorbeeld zichtbaar gemaakt wordt op een uitleeseenheid of display. 2 Omzettingen 2.1 Van decimaal naar binair Praktisch bestaan er enkele eenvoudige methoden om een decimaal getal om te zetten naar een binair getal. We bespreken hier de twee technieken. 2.1.1 Aftrekken van de machten van 2 We beschouwen gehele getallen. We trekken van het gegeven decimaal getal de hoogste macht van 2 af die in dat getal begrepen is. Van het verschil trekken we de volgende macht van 2 af en herhalen deze bewerking tot de rest 0 is. Alle machten van 2 die we hebben kunnen aftrekken krijgen een 1, de andere een 0. We illustreren deze werkwijze aan de hand van een voorbeeld. (92)10 = (?)2 Digitale Techniek -talstelsels 1/9 LM 92 − 64 = 28 ⇒ 1x 2 6 28 − 32 = / ⇒ 0 x 2 5 28 − 16 = 12 ⇒ 1x 2 4 12 − 8 = 4 ⇒ 1x 2 3 4 − 4 = 0 ⇒ 1x 2 2 0 − 2 = / ⇒ 0 x 21 0 − 1 = / ⇒ 0 x2 0 (92 )10 = (1011100)2 2.1.2 Opeenvolgende deling We delen het gegeven getal voortdurend door 2 zonder rekening te houden met de decimale fractie. De rest van de deling is dus altijd 0 of 1. Deze resten vormen de opeenvolgende machten van 2, te 0 beginnen met 2 . De omzetting is af van zodra het quotiënt kleiner is dan 1. (92)10 = (?)2 92:2=46 46:2=23 23:2=11 11:2=5 5:2=2 2:2=1 1:2=0 0 Rest 0 Rest 0 Rest 1 Rest 1 Rest 1 Rest 0 Rest 1 0x2 1 0x2 1x2² 1x2³ 4 1x2 5 0x2 6 1x2 LSB MSB (92 )10 = (1011100)2 2.2 Van binair naar decimaal Ook het omgekeerde is mogelijk. Voor een gegeven binair getal bestaan er enkele eenvoudige technieken om dit getal om te zetten naar een decimaal getal. 2.2.1 Optellen van de machten van 2 We tellen de gewichten samen van de bits die een 1 bevatten. We illustreren deze werkmethode met een voorbeeld. We beschouwen gehele getallen. (1001011)2 = (?)10 1 0 X X 6 5 2 2 = = 64+ 0+ 0 X 4 2 = 0+ 1 X 2³ = 8+ 0 X 2² = 0+ 1 X 1 2 = 2+ 1 X 0 2 = 1=75 (1001011)2=(75)10 Digitale Techniek -talstelsels 2/9 LM 2.2.2 Opeenvolgende vermenigvuldiging De werkwijze is nu de volgende: - De bit met het grootste gewicht vermenigvuldigen we met 2 De juist lager gelegen bit wordt erbij opgeteld Het verkregen resultaat vermenigvuldigen we met 2 en de juist lager gelegen bit tellen we weer op, enz. tot de laaste bit (LSB) opgeteld is. Ook dit illustreren we met een voorbeeld. We beschouwen gehele getallen. (1001011)2 = (?)10 MSB LSB 1001011 (1x2)+0=2 (2x2)+0=4 (4x2)+1=9 (9x2)+0=18 (18x2)+1=37 (37x2)=75 (1001011)2=(75)10 2.3 Bijzondere omzettingen 2.3.1 Binaire getallen met fracties na de komma omzetten naar decimale getallen. ( 0 , …)2 -> (…)10 Bij bovenvermelde getallen wordt de volgende werkwijze toegepast: - Deel de LSB door 2 - Tel de bit die onmiddellijk links van de LSB staat op bij het quotiënt - Het resultaat deelt men opnieuw door 2 en men telt weer de bit op die onmiddellijk links staat. Men herhaalt deze bewerking tot het binair punt bereikt is Deze werkwijze verduidelijken we aan de hand van een voorbeeld. Voorbeeld 1 (0.1011)2 = (?)10 MSB LSB 0.1011 (1:2)+1=1,5 (1.5:2)+0=0.75 (0.75:2)+1=1.375 (1.375:2)=0.6875 (0.1011)2=(0.6875)10 Voorbeeld 2 (0.0111)2 = (?)10 MSB LSB 0.0111 (1:2)+1=1.5 Digitale Techniek -talstelsels 3/9 LM (1.5:2)+1=1.75 (1.75:2)+0=0.875 (0.875:2)=0.4375 (0.0111)2=(0.4375)2 5.2.3.2 Binaire getallen met bits vóór en na de komma omzetten naar decimale getallen. ( … , …)2 -> (…)10 Hier worden de twee regels voor omzetting toegepast: - Bits voor de komma: Bits na de komma: regel van MSB x 2 + de bit rechts enz. regel van LSB : 2 + de bit links enz. We verduidelijken aan de hand van een voorbeeld. (1101.0111)2 = (?)10 MSB LSB 1101.0111 (1x2)+1=3 (3x2)+0=6 (6x2)+1=13 (1:2)+1=1.5 (1.5:2)+1=1.75 (1.75:2)+0=0.875 (0.875:2)=0.4375 (11010111)2=(13.4375)10 Een andere methode is het gebruik van de machten van 2. We nemen daartoe hetzelfde voorbeeld. (1101.0111)2 = (?)10 1 X 2³ 8+ 1 X 2² 4+ 0 X 1 2 0+ 1 X 0 2 1 . 0 X -1 2 0+ + 1 X -2 2 0.25+ 1 X -3 2 0.125+ 1 X -4 2 0.0625= 13.4375 (1101.0111)2=(13.4375)10 5.2.3.3 Decimale getallen met cijfers na de komma omzetten naar binaire getallen (0 , …)10 -> (…)2 De werkwijze om een decimale breuk om te zetten in een binaire breuk is de volgende: - Men vermenigvuldigt het getal met 2 Het cijfer dat men vóór de komma bekomt in dat produkt is het eerste cijfer na de komma van de binaire breuk De fractie van het bekomen produkt wordt dan weer met 2 vermenigvuldigd, enz. Bemerking: Deze procedure leidt niet noodzakelijk tot een eindige binaire breuk (denk aan afrondingen). We beschouwen eerst een paar grondprincipes. (0.35)10 1 =3 +5 10 10 2 In analogie daarmee +5 = [(3 x16 ) + 5] / 16 2 = 53 = (0.2070313)10 16 16 256 1 2 3 (0.111)2 = 1 2 + 1 2 + 1 2 = [(1x 4) + (1x2 ) + 1] / 8 = 7 8 = (0.875)10 (0.35)16 =3 1 2 Digitale Techniek -talstelsels 4/9 LM Voorbeeld 1 (0.625)10 = (?)2 0.0625x2=1.250 0.250x2=0.500 0.500x2=1.000 0.000x2=0.000 1 MSB 0 1 0 LSB (0.625)10=(0.1010)2 Voorbeeld 2 (0.300)10 = (?)2 0.300x2=0.600 0 MSB 0.600x2=1.2 0.2x2=0.4 0.400x2=0.8 0.8x2=1.6 0.600x2=1.200 1 0.200x2=0.400 0 LSB enz. 1 0 0 1 (0.300)10=(0.0100110)2 2.3.4 Decimale getallen met cijfers voor en na de komma naar binaire getallen. (…,…)10 -> (…)2 Hier passen we beide regels toe respectievelijk voor de cijfers vóór en de cijfers na de komma. We verduidelijken aan de hand van een paar voorbeelden. Voorbeeld 1 (83.625)10 = (?)2 83 41 20 10 5 2 1 0.625 0.250 0.500 0.000 : : : : : : : 2 2 2 2 2 2 2 X X X X = = = = = = = 2 2 2 2 41 20 10 5 2 1 0 ⇒ ⇒ ⇒ ⇒ ⇒ ⇒ ⇒ = = = = Rest 1 1 0 0 1 0 1 1.250 0.500 1.000 0 0 X X X X X X X 2 1 2 2 2 3 2 4 2 5 2 6 2 1 0 1 0 LSB MSB MSB LSB (83.625)10=(1100101,1010)2 Digitale Techniek -talstelsels 5/9 LM Voorbeeld 2 (250.3)10 = (?) 250 125 62 31 15 7 3 1 0.300 0.600 0.200 0.400 0.800 0.600 : : : : : : : : X X X X X X 2 2 2 2 2 2 2 2 2 2 2 2 2 2 = = = = = = = = = = = = = = 125 62 31 15 7 3 1 0 0.600 1.200 0.400 0.800 1.600 1.200 0 1 0 1 1 1 1 1 0 1 0 0 1 1 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 LSB MSB MSB LSB (250.3)10=(11111010.010011)2 5.3 Hexadecimaal talstelsel Omdat notatie met binaire getallen nogal lang is en moeilijk leesbaar is, wat vaak tot fouten leidt in het lezen of overnemen, wordt de hexadecimale notatie vaak toegepast. We splitsen of schrijven het binair getal in groepjes van 4 wat dus 16 verschillellende mogelijkheden oplevert. Het groepje van 4 wordt vervangen door zijn hexadecimale equivalent. Voor alle duidelijkheid: computers rekenen binair, we stellen enkel de getallen voor het gemak hexadeciaal voor Het grondtal is dus 16. De cijfersymbolen gebruikt in het hexadecimaal talstelsel zijn 0 tot en met F. 0123456789ABCDEF Daarbij is A = 10, B = 11, C = 12, D = 13, E = 14 en F = 15 Digitale Techniek -talstelsels 6/9 LM Tellen in het hexadecimale talstelsel gebeurt als volgt. dec 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 … binair hex Algemeen kan een hexadecimaal getal als volgt worden genoteerd. 2 1 0 -1 -2 G = … + a2 x 16 + a1 x 16 + a0 x 16 + a-1 x 16 + a-2 x 16 + … Bij wijze van voorbeeld bekijken we het voorbeeld 1 0 en 1 A in het hexadecimaal stelsel en bepalen de waarde ervan in het decimale stelsel. (10)16=(?)10 1 0 X X 1 0 16 16 = = 16+ 0= 16 (10)16=(16)10 (1A)16=(?)10 1 A A=10 X X 1 0 16 16 16+ 10= 26 (1A)16=(26)10 Tien in het hexadecimaal stelsel is dus gelijk aan 16 in het decimaal stelsel. Tien (16 decimaal) volgt dus inderdaad op F (15 decimaal). Zelfde beredenering voor 1A. Voorbeeld: G = (18B.2)16 = (?)10 Digitale Techniek -talstelsels 7/9 LM 1 X 8 X B . =11 X 0 16 2 1 16 = 16 1 = 256+ 128+ 11+ G=(18B.2)16=(395,125)10 2 X -1 16 0,125= 395,125 Dit talstelsel is op zich zelf niet bruikbaar in de techniek maar wordt veel toegepast om binaire getallen verkort weer te geven. Het praktisch nut zal blijken bij de studie van microprocessors om onderandere de geheugenlocaties aan te duiden en data in te schrijven. 5.3.1 Omzettingen 5.3.1.1 Van decimaal naar hexadecimaal De omzettingstechnieken zijn analoog met de voorgaande besproken methoden. 5.3.1.1.1 Aftrekken van de machten van 16 We passen hetzelfde principe toe als bij de omzetting van decimaal naar binair. Het verschil is dat we nu met het grondtal 16 werken. We verduidelijken met een voorbeeld : (10892)10 = (?)16 10892 - 2 X 2700 - 10 X 140 - 8 X 12 - 12 X 3 16 16² 1 16 0 16 = = = = 10892 2700 140 12 - 8192 2560 128 12 = = = = 2700 140 12 0 (10892)10=(2A8C)16 (A=10 C=12) Als de aftrekking niet op 0 uitkomt, dan moet men de aftrekking blijven uitvoeren tot een voldoende nauwkeurigheid is bereikt. 5.3.1.1.2 Opeenvolgende deling Deel het gegeven getal door 16. Vermenigvulgdig de decimale fractie van het bekomen quotiënt met 0 16. Dit produkt vormt de rest. Die resten zijn de opeenvolgende machten van 16 te beginnen met 16 of de LSB. We herhalen dit tot het quotiënt kleiner wordt dan 16. We verduidelijken met een voorbeeld. (10892)10 = (?)16 10892 : 16 = 680 : 16 = 42 : 16 = 2 : 16 = 680,75 42.5 2.625 0.125 ⇒ ⇒ ⇒ ⇒ 0.75 0.5 0.625 0.125 X X X X 16 16 16 16 = 12 X = 8 X = 10 X = 2 X 0 16 1 16 16² 16³ LSB MSB (10892)10=(2A8C)16 (A=10 C=12) 5.3.1.2 Van hexadecimaal naar decimaal We gebruiken dezelfde werkwijze als voor de omzetting van een binair getal naar een decimaal getal. 5.3.1.2.1 Optellen van machten van 16 We vermenigvuldigen elk symbool met zijn gewicht en tellen de cijferwaarden samen. Digitale Techniek -talstelsels 8/9 LM We verduidelijken met een voorbeeld. (B48F)16 = (?)10 B 4 B=11 X X 16³ 16² = = 45056+ 1024+ 8 F F=15 X 0 16 = 15= 46223 X 1 16 = 128+ (B48F)16=(46223)10 5.3.1.2.2. Opeenvolgende vermenigvuldiging Ook hier gebruiken we dezelfde methode als bij de omzetting van binair naar decimaal. (B48F)16 = (?)10 B 4 =11 (11X16) +4 (180X16) +8 (2888X16) +15 8 F =15 180 2888 46223 = = = (B48F)16=(46223)10 5.3.1.3 Van binair naar hexadecimaal We verdelen het binair getal van rechts naar links in groepjes van 4 bits. We vervangen dan iedere groep door het overeenstemmende symbool uit het hexadecimale stelsel. Is de meest linkse groep onvolledig dan vult men aan met nullen. ( 10 1100 1110 0101 )2 = (?)16 0 0 1 0 1 1 0 X X X X X X X 3 2 1 0 3 2 1 2 2 2 2 2 2 2 = = = = = = = 0+ 0+ 2+ 0 8+ 4+ 0+ 2 12=C (10 1100 1110 1010)2=(2CE5)16 0 X 0 2 = 0 1 1 1 X X X 3 2 1 2 2 2 = = = 8+ 4+ 2+ 14=E 0 X 0 2 = 0 0 X 3 2 = 0+ 1 0 X X 2 1 2 2 = = 4+ 0+ 5 1 X 0 2 = 1 5.3.1.4 Van hexadecimaal naar binair We passen de omgekeerde werkwijze toe als bij de omzetting van binair naar hexadecimaal (36BC9)16 = (?)2 3 3 2 1 0 2 2 2 2 X X X X 0 0 1 1 = 0 0 2 1 2 X 0 3 2 X 1 2 0 4 6 2 X 1 1 2 X 0 0 2 X 1 3 2 1 8 = B=11 2 1 2 2 X X 0 1 = 0 2 2 X 1 0 2 X 1 3 1 8 C=12 2 1 2 2 X X 1 0 = 4 0 2 X 0 0 2 X 1 3 2 X 0 2 0 8 0 9 2 X 0 1 2 X 1 0 0 1 = (36BC9)16=(00110110101111001001)2 Digitale Techniek -talstelsels 9/9 LM