Hoofdstuk 5 talstelsels

advertisement
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
Download