IT Informatikk basisfag 28/8 Husk å registrer deg på emnets hjemmeside! http://it.idi.ntnu.no Gikk du glipp av øving? Gjør øving og få den godkjent på datasal av din lærass! Forrige gang: HTML Merkelapper og attributter Ulike typer lister Hvordan lage tabeller? Øving 2: HTML (må godkjennes på sal neste uke) Idag: Lagring av informasjon vha bitmønstre (rekker av er og er) kapittel.4-.7 Heltall og flyttall toers komplement notasjon og flyttallsnotasjon Tegnsett Tallsystem Vi bruker tallsystemer for å representere kvantitet/antall Hvor mange hus ser du ovenfor? 5 i titallsystemet 2 i totallsystemet Begge er like riktige! Multipler av potenser I titallsystemet: 34 = * + 3* + 4* = 2, = og = Potenser av (grunntallet til tallsystemet) Hver posisjon representerer en kvantitet I totallsystemet: Grunntallet er nå 2! Når vi flytter oss mot venstre stiger verdien til tallet med 2-gangen: 2 4, 2 3, 2 2, 2, 2 som er 6, 8, 4, 2,. Potenser av 2! Generellt om tallsystemer Alltid potenser av grunntallet! Hvilken kvantitet representerer 35 x? i sekstallsystemet? base 6 tallsystem i åttetallsystemet? base 8 tallsystem Konvertering Konvertering fra totallsystemet til titallsystemet er veldig greit: 35 6 = *6 2 + 3*6 + 5*6 = *36 + 3*6 + 5* =59 35 8 = *8 2 + 3*8 + 5*8 = *64 + 3*8 + 5* =93 Merk: feil i boka
Konvertering (2) Oppgave Fra titallsystemet til totallsystemet er litt værre, men overkommelig Vi har en fremgangsmåte for dette som vi kan følge slavisk Eks. Hva er 35 i totallsystemet?. Ta tallet og del det på to, ta vare på kvotient og rest. 2. Fortsett og del på to til kvotient blir Restene du får vil sammen være totallsrepresentasjonen Tal l 35 7 8 4 2 Deler på to! Kvotient 7 8 4 2 Rest 35 = 2 Hva er 78 representert i totallsystemet? Hvorfor styre med totallsystemet i dette faget? Tall representert i totallsystemet er enkle å lagre i datamaskinen Inni maskinen brukes høy/lav spenning, strøm/ikke-strøm, lys/ikke-lys til å lagre data Slik kan tall som kun består av og lett lagres ved at feks lav spenning = og høy spenning = Dette er billigere og mer pålitelig enn å lagre direkte i titallsystemet Hvorfor? Flyttall og brøker Vi har selvsagt lov til å ha komma i totallsystemet Feks hva er. 2? Tilsvarende til høyre for komma som til venstre (bare motsatt vei) I titallsystemet: /, /, / osv. I totallsystemet: ½, ¼, /8, /6 osv. Hva med -. 2?. 2 = 5.25 Fortegn og plassering av komma Så hvordan får vi lagret fortegn og plassering av komma i datamaskinen (som bare kan forholde seg til er og er)? Vi har notasjoner for dette Toers komplement notasjon og eksess notasjon for positive og negative heltall Flyttallsnotasjon for brøker (tall med komma) Toers komplement notasjon Setter av halvparten av tallene til negative tall Ikke tenk på hvorfor!
Addisjon av tall representert i toers komplement notasjon To positive tall 5 pluss : + = Hva dersom vi prøver med negative tall? 3 pluss - : + = Dersom vi kutter av evt tall til helt til venstre kan vi bruke samme fremgangsmåte for substraksjon som for addisjon! Hvordan finne toers komplement representasjon til tall? Positivt tall: konverter til totallsystemet og du har svaret 6 = 2 Negativt tall: konverter til totallsystemet (se bort fra minus), deretter kopier fra høyre til venstre helt til første er, deretter snur du fra til og til (ta komplementet) -6 = (minus) 2 = tkn Kode -6 i toers komp notasjon - Ilustrasjon fra boka Addisjons i toers komplement eksempler fra boka Overflow (overflyt) Normalt satt av 32 bit ( er og er) til heltall Kan da lagre heltall fra 2 47 483 648 til 2 47 483 647 Hva skjer når vi legger sammen to tall som har et resultat som ligger utenfor det området vi kan lagre? Vi får såkalt overflyt! Eksess-notasjon for lagring av pos og neg heltall En annen notasjon for å lagre positive og negative heltall kalles eksess-notasjon Fyller opp nedenfra 4 +4 = tkn + tkn = tkn Uansett om vi setter = -8 av 64, 28 bit eller mer så kan vi ikke År-2 problemet? telle til uendelig!
Flyttall (ikke hele tall) notasjon: Floating point notation Tar utg pkt i totallsystemtallet -. 2 Hvordan representere dette fullstendig binært? Dvs vha bit-mønster. Vi må lagre fortegn, men også posisjonen til komma (engelsk: radix) Floating point notation (flyttallsnotasjon) Setter av sign-bit til å ta vare på fortegn Setter av exponent til å ta vare på posisjonen til komma Setter av mantissa til å ta vare på råtallene - 2 Koding av 2 ¼ (=2.25 ) Normalisert form Finn råtallene i totallsystemet og sett disse i mantissa 2 ¼ =.. Råtall blir da I utg pkt er komma plassert til venstre for råtallene. Lagre i exponent hvor mange flytt som skal gjøres mot høyre Dette skal lagres i eksess-notasjon! Lagre fortegn i sign bit = positiv verdi = negativ verdi Mest signifikante bit (den helt til venstre) i mantissa skal være den første er i totallsrepresentasjonen Eks /8 er lik. i totallsystemet Råtall/mantissa blir og ikke i normalisert form Dette for å hindre at samme brøk kan ha ulike representasjoner i flyttallsnotasjon Obs! Sjekk om mantissa er stor nok til å representere brøken/flyttallet I boka har signbit+exponent+mantissa en lengde på 8 bit. I datamaskinen kan dette typisk være 32 eller 64 bit. For liten mantissa kan gi avrundingsfeil Eks: brøken 2 5/8 =.625 5/8 = ½ + /8 Truncation error (avrundingsfeil) Hva skjer om vi skal legge sammen feks 4 ½ og ¼? 4 ½ i totallsystemet:.. i flyttallsnotasjon: ¼ i totallsystemet:.. i flyttallsnotasjon: 4 ½ + ¼ = 4 ¾, men kan 4 ¾ representeres i 8-bits flyttallsnotasjon? 4 ¾ =. (for mange bits!)
Vi kan øke mantissa Det er vanlig å bruke 32-bits flyttallsnotasjon for å lagre flyttall Men blir flyttallene for lange får vi likevel avrundingsfeil Eks i Java: public class Test { public static void main(string[] args) { float a = f; float b =.f; System.out.println(a+b); } } Hva skrives ut på skjerm? Ikke. som er riktig svar, men. Et annet problem med å lagre brøker Kan /3 representeres eksakt i titallsystemet? Nei, vi får.333333333333333333... Dette kalles problemet med ikkeavsluttende ekspansjoner (nondeterming expansions) Vi møter samme problemet i totallsystemet, men for enda flere brøker Feks / Rekkefølgen brøker legger sammen kan avgjøre om vi får avrundingsfeil eller ikke Gitt 8-bits flyttallsnotasjon: Vi skal legge sammen 2 ½ + /8 + /8 Dersom vi først legger sammen 2 ½ og /8, og deretter legger til /8 får vi avrundingsfeil fordi mellomsvaret 2 ½ + /8 som er 2 5/8 ikke kan representeres i flyttallsnotasjon på 8 bit Dersom vi legger sammen /8 og /8 først og deretter legger til 2 ½ får vi riktig svar. Hvorfor? Hva har dette å si? Det settes av nok bit til at man klarer å representere nøyaktig nok (stort sett) Men prøver vi å legge sammen med. feks i Excel får vi problemer For vanlig bruk er ikke dette noe stort problem, men feks i et navigasjonssystem eller værberegningssystem kan det være kritisk! Binær representasjon av tekst Prinsipp: Hvert tegn tildeles hvert sitt bitmønster A =, B = Se Appendix A i Brookshear Men hvordan bli enige om hvilke bitmønstre som repr hvilke tegn? ANSI (American National Standards Institute) har laget en standard ASCII (American Standard Code for Information Interchange) Hadde opprinnelig en lengde på 7 bit Hvor mange tegn kan man representere vha 7 bit? 2 7 = 28 Eksempel ASCII er idag utvidet til 8 bit og man kan representere 256 ulike tegn (2 8 ) De ekstre 28 tegnene brukes til nasjonale tegn (feks æ,ø, å eller õ, ö etc.) En rekke av bits vil således kunne representere et ord eller en setning H E L L O.
Andre tegnsett I dag Mandag: kap. i Brookshear Unicode (hvert tegn lengde 6 bits) Kan representere 65536 ulike tegn ISO (The International Organization for Standardization) har laget et tegnsett med bitmønstre på 32 bits Kan representere milliarder av tegn! Representere informasjon binært vha bitmønstre (rekker av er og er) Over Heltall (tar utg pkt i totallsystemet) -flow Toers komplement notasjon Eksess notasjon Flyttall/brøker (tar utg pkt i totallsystemet) Flyttallsnotasjon Tekst Tegnsett som ASCII og Unicode Avr. feil