Talstelsels, getalnotaties en Ascii code 1 Algemeenheden Digitale systemen werken met nullen en enen omdat dit elektronisch gemakkelijke te verwezenlijken is. De transistor wordt in digitale systemen als schakelaar gebruikt, er zijn slechts twee toestanden (geleiden of sperren) Hierdoor zijn deze circuits gemakkelijk te bouwen en is de kans op fouten kleiner. Een computer die zou werken met meerdere niveaus, bv. een quartaire (4 niveaus of mogelijkheden), octale (8) of decimale(10) computer zou sneller zijn dan een binaire. Er zijn immers meerdere toestanden mogelijk op één draad. Het zou echter heel moeilijk zijn om dit praktisch te verwezenlijken. Naarmate er meer toestanden zijn worden de zones kleiner, en is de kans dat er fouten optreden groter. Bovendien is het moeilijker om een systeem te bouwen dat meerdere niveaus kan verwerken en onthouden. 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. Keyboard. 2. Encoder 3. Computer 4. Decoder 5. Display 1 2 3 4 5 Een schakeling, encoder genoemd, zet de ingevoerde decimale, of alfanumerieke 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. Digitale Techniek -talstelsels 1/19 LM
2 Decimaal talstelsel Het decimaal talstelsel heeft als grondtal 10. Het grondtal geeft het aantal bruikbare digits aan. In het decimaal talstelsel zijn er tien mogelijkheden, elk met hun eigen digit. De gebruikte digits zijn: {0,1,2,3,4,5,6,7,8,9}. Als we verder dan 9 willen tellen dan nemen we er een nieuwe rang bij. Na 9 komt 10, na 99 komt 100 enz. De positie van het digit in het getal heeft de rangorde of gewicht weer. Het getal 123 moeten we eigenlijk lezen als: 1x100 2x10 3x1 De laagste rang (minst beduidende digit helemaal rechts) heeft het gewicht 10 0, de middelste rang 10 1 de volgende rang 10 2 enz. Elke rang heeft een n keer hogere waarde dan de vorige rang. Hierbij is n het grondtal van het gebruikte talstelsel. 1000 100 10 1 0,1 0,01 10 3 10 2 10 1 10 0 10-1 10-2 2 4 5 6, 7 8 2x1000 4x100 5x10 6x1 7x0,1 8x0,01 Tellen we alle gewichten samen: 2000+400+50+6+0,7+0,08 dan hebben we 2456,78 de waarde van ons getal 3 Binair talselsel De redenering is hier dezelfde als bij het decimaal talstelsel. Het binair talstelsel heeft als grondtal 2. Het grondtal geeft hier terug het aantal bruikbare digits aan. In het binair talstelsel zijn er twee mogelijkheden, elk met hun eigen digit. De gebruikte digits zijn: {0,1}. Als we verder dan 2 willen tellen dan nemen we er een nieuwe rang bij. Na 1 komt 10, na 11 komt 100 enz. De positie van het digit bepaalt ook hier het gewicht. De laagste rang (minst beduidende digit helemaal rechts) heeft het gewicht 2 0, de middelste rang 2 1 de volgende rang 2 2 enz. Digitale Techniek -talstelsels 2/19 LM
8 4 2 1 0,5 0,25 2 3 2 2 2 1 2 0 2-1 2-2 1 0 1 1, 0 1 1x8 0x4 1x2 1x1 0x0,5 1x0,25 De decimale waarde van 1011,01 (2) = 8+2+1+0,25=11,25 (10) De indexen (2) en (10) geven het soort talstelsel aan. Anders zou je niet weten of 101 binair of decimaal is. Bij het binair talstelsel spreken we meestal niet van digits, maar van bits. Eén bit is één positie, een 1 of een 0. Het meest rechtse bit noemen we het msb (most significant bit) het meest linkse het lsb (least significant bit) msb lsb 1011,01 (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 92 64 28 1x2 28 32 / 0x2 28 16 12 1x2 12 8 4 1x2 4 4 0 1x2 0 2 / 0x2 0 1 / 0x2 92 10 1011100 2 1 0 2 3 5 4 6 Digitale Techniek -talstelsels 3/19 LM
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 beginnen met 2 0. De omzetting is af van zodra het quotiënt kleiner is dan 1. (92) 10 = (?) 2 92:2=46 Rest 0 0x2 0 LSB 46:2=23 Rest 0 0x2 1 23:2=11 Rest 1 1x2² 11:2=5 Rest 1 1x2³ 5:2=2 Rest 1 1x2 4 2:2=1 Rest 0 0x2 5 1:2=0 Rest 1 1x2 6 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. Een voorbeeld met een geheel getal (1001011) 2 = (?) 10 1 0 0 1 0 1 1 X X X X X X X 2 6 2 5 2 4 2³ 2² 2 1 2 0 = = = = = = = 64+ 0+ 0+ 8+ 0+ 2+ 1=75 (1001011) 2 =(75) 10 Een voorbeeld met een komma getal (10010,11) 2 = (?) 10 1 0 0 1 0 1 1 X X X X X X X 2 4 2³ 2² 2 1 2 0 2-1 2-2 = = = = = = = 16+ 0+ 0+ 2+ 0+ 0,5+ 0,25=18,75 (1001011) 2 =(75) 10 Digitale Techniek -talstelsels 4/19 LM
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 verschillende mogelijkheden oplevert. Het groepje van 4 wordt vervangen door zijn hexadecimale equivalent. Voor alle duidelijkheid: computers rekenen en werken nog steeds binair, we stellen enkel de getallen hexadecimaal voor omdat dit gemakkelijker leesbaar is. Het hexadecimaal talstelsel heeft als grondtal 16 De gebruikte digits zijn: {0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F}. Als we verder dan F willen tellen dan nemen we er een nieuwe rang bij. Na F komt 10, na FF komt 100 enz. De positie van het digit in het getal heeft terug rangorde of gewicht weer. Het getal 123 moeten we eigenlijk lezen als: 1x256 2x16 3x1 De laagste rang (minst beduidende digit helemaal rechts) heeft het gewicht 16 0, de middelste rang 16 1 de volgende rang 16 2 enz. 1000 100 10 1 0,0625 0,00390625 16 3 16 2 16 1 16 0 16-1 16-2 F 4 A C, 7 0 15x4096 4x256 10x16 12x1 7x0,062 5 0x0, 0,00390625 Tellen we alle gewichten samen: 61440 + 1024 + 160 +12 +0,4375 = dan hebben we 62636,4375 de decimale waarde van ons getal Digitale Techniek -talstelsels 5/19 LM
Maken we een tabel met het verband tussen decimaal, binair en hex:. dec binair hex 0 0 0 1 1 1 2 10 2 3 11 3 4 100 4 5 101 5 6 110 6 7 111 7 8 1000 8 9 1001 9 10 1010 A 11 1011 B 12 1100 C 13 1101 D 14 1110 E 15 1111 F 16 1 0000 10 17 1 0001 11 18 1 0010 12... 30 1 1110 1E 31 1 1111 1F 32 10 0000 20 33 10 0001 21 Algemeen kan een hexadecimaal getal als volgt worden genoteerd. G = + a 2 x 16 2 + a 1 x 16 1 + a 0 x 16 0 + a -1 x 16-1 + a -2 x 16-2 + 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 16 1 16 0 = = 16+ 0= 16 (10) 16 =(16) 10 (1A) 16 =(?) 10 1 A X X 16 1 16 0 16+ 10= 26 (1A) 16 =(26) 10 10 in het hexadecimaal stelsel is dus gelijk aan 16 in het decimaal stelsel. Digitale Techniek -talstelsels 6/19 LM
Voorbeeld: G = (18B,2) 16 = (?) 10 1 8 B, 2 X X X X 16 2 16 1 16 0 16-1 256+ 128+ 11+ 0,125= 395,125 G=(18B.2) 16 =(395,125) 10 3.1 Omzettingen 3.1.1 Van decimaal naar hexadecimaal De omzettingstechnieken zijn analoog aan de voorgaande besproken methoden. 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 16 3 = 10892-8192 = 2700 2700-10 X 16² = 2700-2560 = 140 140-8 X 16 1 = 140-128 = 12 12-12 X 16 0 = 12-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. 3.1.1.2 Opeenvolgende deling Deel het gegeven getal door 16. Vermenigvuldig de decimale fractie van het bekomen quotiënt met 16. Dit product vormt de rest. Die resten zijn de opeenvolgende machten van 16 te beginnen met 16 0 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,75 0.75 X 16 = 12 X 16 0 LSB 680 : 16 = 42.5 0.5 X 16 = 8 X 16 1 42 : 16 = 2.625 0.625 X 16 = 10 X 16² 2 : 16 = 0.125 0.125 X 16 = 2 X 16³ MSB (10892) 10 =(2A8C) 16 (A=10 C=12) Digitale Techniek -talstelsels 7/19 LM
3.1.2 Van hexadecimaal naar decimaal We gebruiken dezelfde werkwijze als voor de omzetting van een binair getal naar een decimaal getal. 3.1.2.1 Optellen van machten van 16 We vermenigvuldigen elk symbool met zijn gewicht en tellen de cijferwaarden samen. We verduidelijken met een voorbeeld. (B48F) 16 = (?) 10 B 4 8 F B=11 F=15 X X X X 16³ 16² 16 1 16 0 = = = = 45056+ 1024+ 128+ 15= 46223 (B48F) 16 =(46223) 10 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 8 F =11 =15 (11X16) +4 = 180 (180X16) +8 = 2888 (2888X16) +15 = 46223 (B48F) 16 =(46223) 10 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 0 1 1 1 0 0 1 0 1 X X X X X X X X X X X X X X X X 2 3 2 2 2 1 2 0 2 3 2 2 2 1 2 0 2 3 2 2 2 1 2 0 2 3 2 2 2 1 2 0 = = = = = = = = = = = = = = = = 0+ 0+ 2+ 0 8+ 4+ 0+ 0 8+ 4+ 2+ 0 0+ 4+ 0+ 1 2 =2 12=C 14=E 5=5 (10 1100 1110 1010) 2 =(2CE5) 16 Digitale Techniek -talstelsels 8/19 LM
3.1.4 Van hexadecimaal naar binair We passen de omgekeerde werkwijze toe als bij de omzetting van binair naar hexadecimaal. We vervangen elk hexadecimaal digit door zijn binair equivalent. (36BC9) 16 = (?) 2 3 6 B=11 C=12 9 0 0 1 1 0 1 1 0 1 0 1 1 1 1 0 0 1 0 0 1 (36BC9) 16 =(0011 0110 1011 1100 1001) 2 4 Voorstellen van negatieve getallen Meestal moeten digitale systemen ook met negatieve getallen kunnen omgaan. Er zijn verschillende methodes om negatieve getallen voor te stellen. De meest gebruikte zijn de tekenbit methode en de twee-complement methode. 4.1 Tekenbit methode De eenvoudigste manier om negatieve waarden voor te stellen is het gebruik van het msb. Als het msb een 1 is dan is betreft het een negatief getal, is het msb 0 dan is het een positef getal. Stel: in een geheugen locatie staat: 1001 1001 (2) Dan hebben enkel de meest rechtse bits een gewicht. Het meest linkse bit of most significant bit (vetjes) geeft enkel aan dat het getal negatief is. De waarde van het getal in het voorbeeld is dus -25 (10) Navenaant zou 0001 1001 (2) overeenkomen met +25 (10 Een nadeel van de tekenbit methode is dat zowel 1000 000 (2) = +0 (10) als 0000 000 (2) -0 (10) voorkomt. 4.2 Twee-complement methode Bij de twee complement methode heeft het msb een negatief gewicht. Werken we bv. met een getalbreedte van 8 bits, heeft het linkse bit niet het gewicht 2 7, maar -2 7. Zo is het getal in onderstaand voorbeeld: 1001 1001 =-128+16+8+1=-103 En het getal 0001 1001 = +25 In tegenstelling tot de tekenbit methode heeft het msb hier wel een gewicht. Digitale Techniek -talstelsels 9/19 LM
Het bereik van een 4 bits twee complement methode wordt dan: Dec Bin twee compl. 7 0111 6 0110 5 0101 4 0100 3 0011 2 0010 1 0001 0 0000-1 1111-2 1110-3 1101-4 1100-5 1011-6 1010-7 1001-8 1000 Opdracht Ga zelf het bereik na van een 8 bits getal volgens de twee-complement methode Let op! Om een getal correct te kunnen omzetten moeten we weten hoe een systeem zijn getallen opslaat of verwerkt. Immers 1001 0011 heeft telkens een andere waarde voor het geval we met enkel positief werken is dit: 128+16+2+1=147 (10) In tekenbit is dit: negatief is. 16+2+1=-19 (10) Het meest links bit is 1 en geeft dus aan dat het teken In 2 complement is dit: -128 + 16 +2+1 = -109 (10) In BCD (zie verder) is dit 93 (10) 4.2.1 Omzetten van decimaal naar twee complement. Het omzetten van een negatief decimaal getal naar twee complement gebeurt in 3 stappen: 1) Omzetten naar binair alsof het een positief getal is. Zorg voor voldoende bits zodat het msb een 1 is. 2) alle bits inverteren 3) Eén bijtellen Voorbeeld 1-74 (10) =? (2) twee complement stap 1: 74 (10) = 0100 1010 (2) Stap 2: 1011 0101 Stap 3 + 1 1011 0110 Controle= -128+32+16+4+2= -74 Digitale Techniek -talstelsels 10/19 LM
Voorbeeld 2-121 (10) =? (2) omzetten naar twee complement 16 bits breedte stap 1: 74 (10) = 0000 0000 0111 1001 (2) Stap 2: 1111 1111 1000 0110 Stap 3 + 1 1111 1111 1000 0111 Controle= -32768+16384+8192+4096+2048+1024+512+256+128+4+2+1= -121 5 Getalvoorstellingen Als men de inhoud van een geheugenlocatie bekijkt en de waarde van het binair getal opvraagt, dan moet men zich steeds afvragen welke methode het systeem gebruikt om zijn getallen te verwerken/op te slaan. het getal 1001 1100 kan immers: 128+16+8+4=156 (10) zijn als het systeem enkel met positieve getallen werkt. maar heeft de waarde (16+8+4)=-28 bij toepassing van de tekenbit methode en heeft de waarde -128+16+8+4=-100 bij twee complement methode. In alle programmeertalen zal men bij het aanmaken van een variabele (dit is een locatie in het geheugen waarin men een veranderlijke kan oplsaan) een type moeten opgeven. Dit type bepaalt hoeveel plaats er in het geheugen moet vrij gemaakt worden voor opslag van de variabele en welk soort getal men kan bewaren. Veel voorkomende types zijn integer, long integer, float enz. Digitale Techniek -talstelsels 11/19 LM
5.1 Integer Een integer wordt enkel gebruikt voor het voorstellen van gehelen getallen. Integers komen voor in verschillende lengtes (aantal bits) Veel voorkomende lengtes zijn bvb, 8 bits, 16 bits, 32 bits. Het maximaal getalbereik is uiteraard afhankelijk van de breedte (aantal bits) die een integer in de geheugenruimte inneemt. Het maximaal getalbereik is bij gebruik voor enkel positieve getallen en een breedte van 8 bits 0 t/m 255 (ga na waarom) Bij gebruik van negatieve getallen (in twee complement 8 bits) wordt dit dan -128 t/m +127. Neemt men 16 bits dan is het bereik voor enkel positieve getallen 0 tot 65535 Het bereik met twee complement is dan -32768 tot +32767 5.2 Dubbele integer of long Omdat de getal-grootte van een integer beperkt is werken veel systemen met een dubbele integer of long. Deze heeft meestal een dubbele lengte van ten opzichte van de integer. In kleinere systemen (microcontroller is de integer vaak 8 bits, en de dubbele integer 16 bits. In VBA (Visual Basic for Applications), de programmeertaal van Microsoft voor onder andere Word, Excel en Access is een integer 16 bits en kan die getallen aan van -32,768 tot 32,767. De dubbele integer noemt men in VBA LONG en verbruikt 32 bits. Hierdoor kan deze getallen verwerken van -2.147.483.648 tot 2.147.483.647. Let erop dat er in beide gevallen gewerkt wordt met de twee-complement notatie. 5.3 BCD Bij de BCD notatie worden er 4 bits gebruikt om één decimaal digit voor te stellen. Deze maakt geen 100% gebruik van de mogelijkheden, immers met 4 bits zijn er 2 4 zijn er 16 combinaties mogelijk. Een aantal combinaties blijft dus onbenut. Hieronder het verband tussen de decimale waarde en de BCD notatie Dec Bit3 Bit2 Bit1 Bit0 0 0 0 0 0 1 0 0 0 1 2 0 0 1 0 3 0 0 1 1 4 0 1 0 0 5 0 1 0 1 6 0 1 1 0 7 0 1 1 1 8 1 0 0 0 9 1 0 0 1 Digitale Techniek -talstelsels 12/19 LM
Het getal 123 (10) in BCD is dus 1 2 3 0001 0010 0011 In binair is dit 0111 1011 Hieronder, voorstelling van het getal 5280 (10) in BCD. 5 2 8 0 1 1 1 0 0 0 1 0 1 0 0 0 0 0 0 0 Let op: niet alle systemen plaatsen het minst significante bit op de laagste geheugenlocatie. Zie 6.4 Endianess 5.4 Float of floating point notatie Met integer en dubbele integer kan men geen komma getallen voorstellen. Hiervoor gebruikt men de float notatie of floating point notatie. Vaak wordt deze gebruikt in enkeleprecisie (32 bits) en dubbele precisie (64 bits). Een gestandaardiseerde vorm is de IEE754 vorm. Het komt erop neer dat een getal voorgesteld wordt door: -Tekenbit -mantisse -exponent Het getal 3,14159265358979 (10) zouden we als volgt kunnen voorstellen: Tekenbit = 0 (positief) Mantisse = 314159265358979 Exponent = 10-14 In het geval van de 32 bits notatie wordt voor het tekenbit 1 bit voorzien (bit 31), voor de exponent 8 bits (bits30-23) en voor de mantisse resteren er dan nog 23 bits (bits 0 t/m22) Om een paar voorbeelden te zien en meer info te vinden over de IEE754 notatie verwijzen we naar: http://www.vbvoorbeelden.be/floating-point-notation-single-double-decimal.html http://nl.wikipedia.org/wiki/ieee_754 http://babbage.cs.qc.edu/ieee-754/decimal.html 6. Endianess "Endianness" verwijst in het algemeen naar manieren om een ééndimensioneel systeem (zoals computergeheugen) in een volgorde na elkaar te bekijken. Er zijn twee hoofdsoorten: big-endian en little-endian. Sommige systemen hebben aspecten van beide, die noemt men middle-endian. Als men spreekt over computers wordt endianness ook de bytevolgorde genoemd. Bij het bewaren van een 32 bitswaarde, bijvoorbeeld 4A3B2C1D (16) op geheugenplaats 100, kunnen de verschillende bytes als volgt bewaard worden: Digitale Techniek -talstelsels 13/19 LM
Big-endian 100 101 102 103... 4A 3B 2C 1D... De meest significante byte 4A wordt hier dus eerst geplaatst. Dit noemt men big-endian (ezelsbruggetje: "big end first"). Dit wordt onder andere toegepast door Motorola 68000, en SPARC Little-endian 100 101 102 103... 1D 2C 3B 4A... Hier wordt de minst significante byte eerst gezet, en dit heet little-endian (ezelsbruggetje: "little end first"). Dit wordt toegepast in MOS Technology 6502, DEC VAX, en Intel x86. 7. ASCII code, voorstellen van tekens en besturingscodes Aangezien een computer enkel met bits of veelvouden van bits werkt is er gezocht om de letters van het alfabet binair te kunnen opslaan. Cijfers kan men op verschillende manieren opslaan: binair formaat, BCD formaat, floatingpoint notatie. We wijden daar later een apart hoofdstuk aan. Voor tekens en besturingscodes wordt tegenwoordig meestal de ASCII (American Standard Comittee of Information Interchange) codetabel gebruikt. Deze tabel legt een verband tussen een binaire tekenreeks en een teken. Er bestaat een kortere versie 7 bits ASCII code en 8 bits ASCII code. Uiteraard kunnen er met de 8 bit ASCII code dubbel zoveel tekens weergegeven worden als met de 7 bits tabel. Omdat er in de verschillende landen met andere tekens gewerkt wordt bestaan er verschillende codesets van de ASCII tabel. Als je de onderstaande tabel goed bestudeert, dan zie je dat de codes niet lukraak gekozen zijn. Alle codes kleiner dan 32 (10) of 20 (16) zijn zogenaamde besturingscodes. Ze drukken niets af maar doen iets, bvb 10 (10) zorgt voor een nieuwe regel en 13 (10) voor een carriage return (naar het begin van een nieuwe regel). Deze twee codes worden verstuurd als we op de enter toets duwen. Drukken we op de backspace toets om een karakter voor de actieve locatie te wissen dan wordt code 08 (10) verstuurd. Na de besturingscodes volgen de leestekens, beginnend met code 32 (10) (spatie) en eindigend met code 47 (10) (slash of / ) Hierna volgen de cijfers, dan nog enkele leestekens. Let erop dat de laagste letter in het alfabet de laagste ASCII waarde heeft, A=65 (10), B=66 (10) enz. We kunnen dus alfabetisch sorteren door de ASCII waarden te sorteren op hun binaire waarde. De afstand tussen hoofdletters en kleine letter is steeds even groot. We moeten dus maar een test doen of de ASCII waarde >=65 en <=90 en er vervolgens 32 bijtellen om hoofd- naar kleine letters om te zetten? Digitale Techniek -talstelsels 14/19 LM
Je ziet, er is nagedacht over deze tabel. ASCII code tabel 850 Als je een teken niet op het toetsenbord terugvindt dan kan je dit genereren door de alt toets ingedrukt te houden en de decimale waarde in te geven met de cijfertoetsen. Wil je bvb dit teken genereren dan houd je de alt toets ingedrukt en tik je 127. Zoek de code op voor ± en, test dit uit! De codes, voornamelijk deze boven de 128 (10) zijn afhankelijk van de codetabel, landinstellingen. De codetabel voor West Europa is codetabel 850. http://en.wikipedia.org/wiki/code_page Beware we een tekst in ASCII formaat op de harde schijf (bv. een.txt bestand van kladblok), dan worden de ASCII codes in die tekst omgezet in magnetische velden die overeenstemmen met de binaire waarden van de ASCII code. FrHed (freeware Hex editer) is een programma waarmee je de inhoud van elk bestand in hex en ASCII kan bekijken en veranderen. Let op, als je systeembestanden wijzigt is het bijna zeker dat je grote problemen krijgt! Digitale Techniek -talstelsels 15/19 LM
Opdracht: Open kladblok, schrijf PTI-Eeklo en bewaar het bestand op uw stick als PTIEeklo. Open vervolgens met FrHed en bekijk de codes. Verander de hex codes zo dat Eeklo volledig in hoofdletters is. Bewaar in FrHed. Open opnieuw in kladblok. Schrijf een Word bestand weg met enkel de tekst PTI-Eeklo open in FrHed en bekijk. Wat stel je vast? 8. Variabele van het type string Voor getallen werkt men met de vorige opslagtypes, int, long,. Wil men letters, tekens enzv opslaan dan gebruiken we een variabele van het type string. Een string kan één of meerder karakters opslaan. Eigenlijk is een string een array (reeks). Om de letter P op te slaan heb je slechts een Byte nodig om de code 50( 16 )op te slaan. Om PTI op te slaan heb je een string van 3 byte nodig. Je kan ook cijfers in een string bewaren maar deze worden dan behandeld als tekst (zie punt 8) 9. Overgang tussen types variabelen. Bij het programmeren moet men erop letten dat men het juiste type gebruikt. Zo zal het toewijzen van een kommagetal aan een integer tot een fout leiden of een afronding. Kijken we naar onderstaand programma in pseudo programmeertaal (geen echte taal) In regel 1 maken we in het geheugen een ruimte vrij met symbolisch adres a. We stoppen er het geheel getal 7 in. Dat zal in binaire vorm, zoals hierboven uitgelegd bewaard worden in het geheugen van het systeem. Daarna doen we hetzelfde met b Int a= 7; Int b = 2; Int c = a/b; Print c; In regel 3 gaan we a delen door b en het resultaat op locatie c bewaren (in variabele c). In regel 4 tonen we het resultaat, en dit is?..3. Geen enkele van de variabelen kan een kommagetal opslaan, het getal wordt afgerond. Wat toont? float a= 7; float b = 2; Int c = a/b; Print c; Wat toont? int a= 7; int b = 2; float c = a/b; Digitale Techniek -talstelsels 16/19 LM
Print c; Wat is het verschil in het oplopend sorteren van onderstaande getallen die opgeslagen zijn in ascii en in een integer? 1, 5, 45,3, 27 Sortering volgens asccii? Sortering volgens integer? Een voorbeeld met het optellen van het type string. String a= P ; string b = T ; string c = I ; Print a+b+c; Toont? PTI Wat toont? String a= 2 ; string b = 43 ; string c = 6 ; Print a+b+c; Digitale Techniek -talstelsels 17/19 LM
10. Oefeningen en herhalingsvragen. 1. Waarom werken computers binair? 2. Een quartaire computer zou sneller/trager zijn dan een binaire omdat. twee nadelen van een quartaire computer zijn.. 3. Waarom gebruiken we het hexadecimale talstelsel bij computers als deze binair werken? 4. Zorg dat je kan omzetten van: - binair <->decimaal - hex <-> binair - hex <-> decimaal. De methode die je hiervoor gebruikt mag je zelf kiezen. Maak zelf oefeningen en controleer door middel van de calculator op je computer. Zet deze wel op wetenschappelijk. 5. Zet om in binair -45, -215 volgens de tekenbit en te twee complement methode. 6. Wat is het voordeel van een dubbele integer t.o.v een enkele integer. Hoe bekomt men dit? 7. Wat is het getalbereik van een integer (2 bytes) - enkel positief - tekenbit - twee complement Hoe groot is dit voor een double? 8. Wat is het nut van een float? 9. Uit welke 3 delen is een float opgebouwd? Wat is het nut van elke deel? 10. Bij een float notatie volgens de IEE754 is er geen tekenbit voor de exponent, toch kan men negatieve exponenten meegeven, hoe komt dit? 11. Wat is Endianess, welke soorten zijn er? Wat is het verschil? 12. Er bestaan ook variabelen van het type string en boolean. Waarvoor worden deze gebruikt? 13. Zoek de verschillende soorten variabelen (data types)vba op in C# ( spreek uit C#) 14. 956 (10) wordt opgeslagen als een integer van 2 bytes volgens little endian op geheugenlocaties 3 (10) en 4 (10). We maken een variabele string en vullen deze met de tekst PTI. De string variabele wordt opgeslagen vanaf adres 4 (10) Vul onderstaande geheugenmap aan zodat we de inhoud van het geheugen zien. b 7 b 6 b 5 b 4 b 3 b 2 b 1 b 0 Adres 0005 0004 0003 0002 0001 0000 Digitale Techniek -talstelsels 18/19 LM
8 Links en bronnen http://nl.wikipedia.org/wiki/talstelsel http://nl.wikibooks.org/wiki/wiskunde/talstelsels http://www.ditmar.org/wiskunde/talstelsels.pdf http://geheimeberichten.denayer.wenk.be/f2.htm http://www.gnomon.be/projecten/telsystemen.pdf Digitale technieken 2 de graad Die Keure Digitale Techniek -talstelsels 19/19 LM