V1CP1 – Week 2 Getalrepresentaties Adrie van Doesburg Leo van Moergestel Jan Nijman Daniël Telgen Wouter van Ooijen Tientallige stelsel (decimaal) Bijvoorbeeld: 1523 (cijfers 0 t/m 9) 103 102 101 100 1000 100 10 1 1 5 2 3 Achttallig stelsel (octaal) Bijvoorbeeld: 2763 (cijfers 0 t/m 7) 83 82 81 80 512 64 8 1 2 7 6 3 Tweetallig stelsel (binair) Bijvoorbeeld: 10111110011 (cijfers 0 en 1) 210 29 28 27 26 25 24 23 22 21 20 1024 512 256 128 64 32 16 8 4 2 1 1 0 1 1 1 1 1 0 0 1 1 Zestientallig stelsel (hexadecimaal) Bijvoorbeeld: 5F3 (cijfers 0 t/m 9 en letters A t/m F) 162 256 161 16 160 1 5 F 3 Omrekenen van decimaal naar binair 1523dec = ?bin grootste 2-macht die past in 1523 grootste 2-macht die past in 499 grootste 2-macht die past in 243 grootste 2-macht die past in 115 210 (1024); rest 499 28 (256); rest 243 27 (128); rest 115 26 (64); rest 51 grootste 2-macht die past in 51 grootste 2-macht die past in 19 25 (32); rest 19 24 (16); rest 3 grootste 2-macht die past in 3 grootste 2-macht die past in 1 21 (2); rest 1 20 (1); rest 0 Omrekenen van decimaal naar binair (2) De resultaten op een rijtje: 210 29 28 27 26 25 24 23 22 21 20 1 0 1 1 1 1 1 0 0 1 1 Reken 2009(10) om naar de binaire representatie Omrekenen van binair naar hexadecimaal en octaal bin 01001110001010001010110001100011 hex 4 E 2 8 A C Bepaal zelf de octale waarde 6 3 Bits, nibbels, bytes en words MSB 31 LSB 16 15 87 43 0 bit nibble byte 16 bits word 32 bits word Voorvoegsels voorvoegsel tweemacht waarde Kilo 210 1024 Mega 220 1048576 Giga 230 1073741824 Tera 240 1099511627776 Peta 250 1125899906842624 Exa 260 1152921504606846976 Zeta 270 1180591620717411303424 Binair optellen 0 0 1 1 + + + + 0 1 0 1 = = = = 0 1 1 10 Binair vermenigvuldigen Zeer eenvoudige tafel: 0 0 1 1 x x x x 0 1 0 1 = = = = 0 0 0 1 Binair delen Negatieve getallen -127 11111111 ….. …… -3 10000011 Tekenbit (1=neg) 10000010 -2 -1 DEC -0 +0 +1 +2 Nadelen: twee 0-en 10000001 (-1) 00000001 ( 1) + 10000010 (-2 !) Tekenbit (0=pos) 10000001 BIN 10000000 00000000 00000001 00000010 +3 00000011 ….. …… +127 01111111 1-complement representatie -127 11111111 ….. …… -3 -2 -1 DEC 11111100 Nadeel: nog steeds twee 0-en -0 11111101 11111110 BIN +0 11111111 Flip 0-en 00000000 en 1-en 00000001 +2 Maar 11111110 (-1) +3 00000001 ( 1) + 00000011 ….. 11111111 (-0 !) …… +1 +127 00000010 01111111 10-complement 5000 ….. 9996 9997 9998 9999 0000 0001 0002 0003 ….. 4999 Welke waarde krijgt - 45 ? N – 10000 = - 45 N = 10000 - 45 = 9955 9955 is het 10-complement van 45 2-complement representatie -128 …. -3 -2 Nadeel: Aantal pos. en neg. getallen is asymmetrisch -1 DEC +0 +3 …. +127 …… 11111101 11111110 11111111 BIN +1 +2 10000000 00000000 00000001 Er is nog steeds een tekenbit! 00000010 00000011 …… 01111111 Tel boven verder Schrijf -3 in 2-complement representatie Ga uit van de inverse +3 = 00000011 Flip alle bits 1-complement = 11111100 Tel er 1 bij op 1 + -3 = 11111101 Schrijf nu -15 in 2-complement representatie Waarom moet je iets van getalrepresentaties weten? Is dit een grap? of Werkt Excel niet goed? of Is de CPU defect? Lees het artikel ! Lees het artikel Een computer is ook maar een mens Representatie van niet-gehele getallen Ieder (niet-geheel) getal kan worden geschreven in de vorm n.dddddddddd.. x 10m, met n een cijfer ≠ 0 de z.g. genormaliseerde vorm Het aantal d’s bepaalt de nauwkeurigheid De waarde van m bepaalt de grootte van het getal (m is geheel en kan positief, 0 of negatief zijn) Vb: 0.01875 1.875 1875 = = = 1.875 x 10-2 1.875 x 100 1.875 x 103 Normalisatie in het 2-tallige stelsel In het 2-tallige stelsel kan ieder (niet-geheel) getal worden geschreven in de vorm n.dddddddddd.. x 2m, met n een cijfer ≠ 0 Het enige cijfer ≠ 0 is 1, dus de normaalvorm is: 1.dddddddddd.. x 2m; (iedere d is 0 of 1) Vb: 0.1875 = 1.5 x 2-3 1.875 = 1.875 x 20 1875 = 1.8310546875 x 210 = 1.1 x 2-11 = 1.111 x 20 = 1.11010110011 x 210 Binaire representatie van niet-gehele getallen Ieder (niet-geheel) binair getal in normaalvorm heeft de gedaante 1.dddddddddd.. x 2m; (iedere d is 0 of 1) Enkele trucs bij de opslag van de getallen: • de 1 voor de punt wordt niet opgeslagen (is immers altijd 1) • de exponent m wordt voor opslag verhoogd met 127 een opgeslagen exponenten < 127 zijn dus negatief • als de opgeslagen exponent 0 is, is het getal niet genormaliseerd - de waarde is 0 als alle andere bits 0 zijn - anders is het een speciaal geval De waarde 127 geldt voor 32 bits getallen (voor 64 bits geldt de waarde 1023) ANSI-IEEE 754-1985 floating point Institute of Electrical and Electronics Engineers float tekenbit 1 1 8-bits exponent 23-bits mantisse 11-bits 52-bits double Float representatie van 1995.5 1995.5 = 1.94873046875 x 210 1995.5 = 1.11110010111 x 21010 exp = 10 + 127 = 137 = 10001001 0 10001001 11110010111000000000000 Float representatie van 1995.5 .94873046875 – .5 (2-1) = .44873046875 – .25 (2-2) = .19873046875 – .125 (2-3) = .07373046875 – .0625 (2-4) = .01123046875 – .00781255 (2-7) = .00341796875 – .001952125 (2-9) = .00146484375 – .0009765625 (2-10) = .00048828125 – .00048828125 (2-11) = 0 Oorzaak spreedsheet-probleem 5.8 = 1.45 x 22 = 1.011100110011… x 22 5.4 = 1.35 x 22 = 1.010110011001… x 22 5.8 – 5.4 = 0.000110011010… x 22 = 1.10011010… x 2-2 0.4 = 1.6 x 2-2 = 1.10011001… x 2-2 Bij de conversie naar float treden afrondingsfouten op Bij een aftrekking kan zo’n afrondingsfout doorwerken Opdrachten Bestudeer de paragrafen 3.1 en 3.2 Maak opgaven 3.1 t/m 3.5 (blz. 37)