Digital representasjon

Like dokumenter
Digital representasjon

Digital representasjon

Dagens tema. C-programmering. Nøkkelen til å forstå C-programmering ligger i å forstå hvordan minnet brukes.

Dagens tema INF1070. Vektorer (array er) Tekster (string er) Adresser og pekere. Dynamisk allokering

Vektorer. Dagens tema. Deklarasjon. Bruk

Datamaskinen LC-2. Dagens tema. Tall i datamaskiner Hvorfor kan LC-2 lagre tall i intervallet ? Hvorfor er det akkurat celler i lageret?

Dagens tema. Datamaskinen LC-2 En kort repetisjon. Binære tall Litt om tallsystemer generelt. Binære tall. Heksadesimale og oktale tall

Offentlig utvalg for punktskrift, OUP Norsk standard for 8-punktskrift punktskrift 24. oktober 2004 sist endret

Dagens tema INF1070. Vektorer (array-er) Tekster (string-er) Adresser og pekere. Dynamisk allokering

Dagens tema: INF2100. Utvidelser av Minila array-er. tegn og tekster. Flass- og Flokkode. prosedyrer. Prosjektet struktur. feilhåndtering.

Dagens tema. C-programmering. Nøkkelen til å forstå C-programmering ligger i å forstå hvordan minnet brukes.

IN 147 Program og maskinvare

TDT4105/TDT4110 Informasjonsteknologi grunnkurs:

Læringsmål. INF1000: Forelesning 12. Hovedkilde. Kunne binærtall og heksadesimale tall og konvertering mellom ulike tallsystemer: Titallsystemet

TDT4105/TDT4110 Informasjonsteknologi grunnkurs:

Husk å registrer deg på emnets hjemmeside!

TDT4105/TDT4110 Informasjonsteknologi grunnkurs:

Velkommen til INF2100. Bakgrunnen for INF2100. Hva gjør en kompilator? Prosjektet. Jeg er Dag Langmyhr

Unicode. Unikt vakkert eller unisont håpløst? En vandring gjennom tegnkodingens historie. Dag Lamgmyhr, Ifi/UiO Ark 1 av 23

Alle hele tall g > 1 kan være grunntall i et tallsystem.

Tallsystemer. Tallene x, y, z og u er gitt ved x = 2, y = 2, z = 4 og u = 2. Dermed blir =

Tallsystemer. Tallene x, y, z og u er gitt ved x = 2, y = 2, z = 4 og u = 2. Dermed blir =

Modulo-regning. hvis a og b ikke er kongruente modulo m.

Alle hele tall g > 1 kan være grunntall i et tallsystem.

Velkommen til INF2100

ISO Dagens tema. Tegn. Uttrykk. I Minila lagres kun heltall, men de kan tolkes som tegn. Det siste om Minila.

Tall. Ulike klasser tall. Læringsmål tall. To måter å representere tall. De naturlige tallene: N = { 1, 2, 3, }

Tall. Binære regnestykker. Binære tall positive, negative heltall, flytende tall

UNIVERSITETET I OSLO

Digital representasjon

Tegn og tekst. Posisjonssystemer. Logaritmer en kort repetisjon. Bitposisjoner og bitmønstre. Kapittel August 2008

INF1040 Oppgavesett 7: Tall og geometrier

Albregtsen og Skagestein: Digital representasjon Løsningsforslag til kapittel 2 Representasjon av tegn og tekster

UNIVERSITETET I OSLO

Diskret matematikk tirsdag 13. oktober 2015

Litt om Javas håndtering av tall MAT-INF 1100 høsten 2004

Tall. Posisjons-tallsystemer. Representasjon av heltall. Tall positive, negative heltall, flytende tall. Tekst ASCII, UNICODE XML, CSS

IT1101 Informatikk basisfag 4/9. Praktisk. Oppgave: tegn kretsdiagram. Fra sist. Representasjon av informasjon binært. Ny oppgave

INF1400 Kap 1. Digital representasjon og digitale porter

Oppsummering av Uke 3. MAT1030 Diskret matematikk. Binære tall. Oppsummering av Uke 3

Mer om representasjon av tall

Konvertering mellom tallsystemer

Teori og oppgaver om 2-komplement

( ) ( ( ) ) 2.12 Løsningsforslag til oppgaver i avsnitt

Teori oppsummering (HW & DR)

Rekursjon. (Big Java kapittel 13) Fra Urban dictionary: recursion see recursion. IN1010 uke 8 våren Dag Langmyhr

Handi-Lift EA7 Målskjema

INF1000 : Forelesning 1 (del 2)

Teori oppsummering (HW & DR) Rune Sætre

Representasjon av tall på datamaskin Kort innføring for MAT-INF1100L

INF1040 løsningsforslag oppgavesett 7: Tall og geometrier

Oppgaver MAT2500. Fredrik Meyer. 11. oktober 2014

INF1040 Oppgavesett 1: Tallsystemer og binærtall

Reelle tall på datamaskin

Dagens plan. INF Algoritmer og datastrukturer. Koding av tegn. Huffman-koding

INF1040 Digital representasjon TALL

Testobservator for kjikvadrattester

Dagens tema. Flyt-tall. Koding. Tegnsett. Hvordan lagres de? Hvilke egenskaper har de? Hvordan regner man med dem?

ib. 1 ^^HE Lokalitetesklassifisering ^ Kobbe v i <: og Furuho men Oppdrett AS

INF1040 Digital representasjon

Litt Java-historikk. Litt Java-historikk. Ulike varianter for ulike behov. Litt Java-historikk. The Green Team

ﺪ ﻩ ﻋﺍ ﻮﹶ ﻭ ﻗ ﻪ ﹾﻘ ﹾﻟ ﻔ ﺍ ﹺﻝ ﻮ ﹸﺃ ﺻ ﹸ ﻣ ﺔ ﻮﹸ ﻈ ﻣ ﻨ $ ﺡﺮﺷ! " ' (# $% & )*! +,!* -

Oversikt. INF1000 Uke 2. Repetisjon - Program. Repetisjon - Introduksjon

INF1040 Oppgavesett 3: Tegn og tekst

MAT-INF 1100: Obligatorisk oppgave 1

Teori oppsummering (HW & DR) Rune Sætre

TALL. Titallsystemet et posisjonssystem. Konvertering: Titallsystemet binære tall. Det binære tallsystemet. Alternativ 1.

Oversikt. INF1000 Uke 1 time 2. Repetisjon - Introduksjon. Repetisjon - Program

Kapittel september Institutt for geofag Universitetet i Oslo. GEO En Introduksjon til MatLab. Kapittel 7.

MAT1030 Diskret matematikk

MAT-INF 1100: Obligatorisk oppgave 1

DRIFTSANALYSER 2012/2013 FORELØBIGE RESULTATER

Kort om meg. INF1000 Uke 2. Oversikt. Repetisjon - Introduksjon

Farger. Introduksjon. Skrevet av: Sigmund Hansen

Forelesning Datatyper Kap 5.2 Instruksjonsformat Kap 5.3 Flyttall App B

Å lese tall fra en fil, klassen Scanner

INF1000 undervisningen INF 1000 høsten 2011 Uke september

Olaf Christensen Digitale Bilder

INF1020 Algoritmer og datastrukturer GRAFER

Handi-Lift EA7 Målskjema

Målet med dette notatet er å dokumentere at det er funnet løsmasser ved grunnen og å dokumentere miljøgiftkonsentrasjonen i sedimentene.

Kapittel 2 TALL. Tall er kanskje mer enn du tror

PhotoShop Grunnleggende ferdigheter

Resymé: I denne leksjonen blir de viktigste tallsystemer presentert. Det gjelder det binære, heksadesimale og desimale tallsystem.

Farger Introduksjon Processing PDF

Læreboken på 45 minutter

TALL. 1 De naturlige tallene. H. Fausk

1 Potenser og tallsystemer

Tegn og tekst. Et representert tegn kan vises på flere måter. Noen definisjoner. Enda noen definisjoner. \yvind og ]se N{rb}? a a a.

Fjord Forsøksstasjon Helgeland AS

1 Geometri R2 Oppgaver

Transkript:

Digital representasjon Alt er bit! Hvordan lagre tall tekst bilder lyd som bit i en datamaskin

Hvordan telle binært? Binære tall Skal vi telle med bit ( og ), må vi telle binært. Dette gjøres egentlig på samme måte som vi teller desimalt: Øk siste siffer med. Hvis vi ikke har flere siffer, sett til og gjenta for sifferet til venstre. Binært Desimalt 2 3 4 5 6 7 8 9 Notasjon Hvis det mulighet for tvil, skriver vi binære tall som 2 og desimale tall som.

Litt matematikk Et matematisk blikk I det desimale tallsystemet har posisjonene vekt,,,,... =,, 2, 3,... (Notasjonen a n («a i n-te») betyr a } a {{ a}.) n ganger I det binære tallsystemet har posisjonene vekt, 2, 4, 8,... = 2, 2, 2 2, 2 3,... 2 = 8 4 2 2 3 2 2 2 2 =

Vi teller igjen Vi teller binært med grupper av bit, f eks byte som inneholder 8 bit: = = = 2. = 26 = 27 = 2 7 Vi stopper når vi kommer til øverste bit.

Hva med negative tall? Negative tall Et negativt tall n lagres i 8 bit som 2 8 + n = 256 + n: = = 256 = 255 = 2 = 3. = 27 = 28 Øverste bit («fortegnsbitet») angir om et tall er negativt.

Hvor store tall kan vi da lagre? Heltall i Java Java tilbyr disse tallene: byte 8 bit 28 +27 short 6 bit 32 768 +32 767 int 32 bit 2 47 483 648 +2 47 483 647 long 64 bit 9 223 372 36 854 775 88 +9 223 372 36 854 775 87

Hvor store tall kan vi da lagre? Hvorfor er dette viktig? class Overflyt { public static void main(string[] arg) { int v =, v2 = v*v; } } System.out.println("v=" + v + " og v2=" + v2); gir dette resultatet $ javac Overflyt.java $ java Overflyt v= og v2=46548

Hvor store tall kan vi da lagre? class IkkeOverflyt { public static void main(string[] arg) { long v =, v2 = v*v; } } System.out.println("v=" + v + " og v2=" + v2); gir riktig svar: $ javac IkkeOverflyt.java $ java IkkeOverflyt v= og v2=

Hvor store tall kan vi da lagre? Heksadesimal notasjon Det er lett å gjøre feil når man jobber med binære tall:...... Det er enklere å erstatte fire og fire binære sifre med heksadesimale sifre 6 F 6 : }{{} }{{} }{{} }{{} }{{} }{{} }{{} }{{} F 6 E 6 D 6 C 6 B 6 A 6 9 6 8 6 }{{} }{{} }{{} }{{} }{{} }{{} }{{} }{{} 7 6 6 6 5 6 4 6 3 6 2 6 6 FEDCBA98765432 6 6

Hvor store tall kan vi da lagre? Oktal notasjon Tidligere brukte man ofte oktal notasjon der man slår sammen tre og tre bit: }{{} }{{} }{{} }{{} }{{} }{{} }{{} }{{} 7 8 6 8 5 8 4 8 3 8 2 8 8 I dag har hex-notasjonen overtatt. 8

Men det finnes flere tall... Men hva med disse tallene? Andromedagalaksen er 24 29 742 km unna. π = 3,459265 Et H-atom er, 96 mm stort. Vi trenger ikke bare heltall men også tall som kan ha veldig små og veldig store verdier kan ha desimaler ikke behøver å være helt nøyaktige.

Flyttall er løsningen Løsningen i det desimale tallsystemet er å oppgi tallet med -erpotens: Andromedagalaksen er 2,4 9 km unna. π = 3,459265 Et H-atom er 9,6 8 mm stort. Så lagrer vi den justerte tallverdien (9,6) og -erpotensen ( 8). På en datamaskin gjør vi det samme, men bruker vi 2-erpotenser i float og double. 3 3 23 22 S 2-erpotens Tallverdien

Flyttall er løsningen I Java har vi disse flyttallene: Minste Største float 32 bit 7 sifre,2 38 3,4 38 double 64 bit 6 sifre 2,2 38,8 38 Vi kan konvertere mellom heltall og flyttall: class Konvertering { public static void main(string[] arg) { double f = 3.94, f2; int i; } } i = (int)f; f2 = (double)i; System.out.println("i=" + i + " og f2="+f2); Svaret blir: i=3 og f2=3.

Trenger jeg bekymre meg for dette? Er dette viktig? class FloatTest { public static void main(string[] arg) { double a =.234567892345678923456789; } } System.out.printf("a=%.3f\n", a); fungerer slik: $ javac FloatTest.java $ java FloatTest a=.23456789234567

Kan vi lagre tegn som tall? Tekster Hvordan lagrer vi tegn i datamaskinen? Det er lett: Sett opp en tabell over tegn vi trenger og gi hvert tegn et nummer.

Er det virkelig så enkelt? Problemet Hva hvis ikke alle bruker samme tabell?

Mange gode forsøk ASCII Første vellykkede forsøk på standardisering var ASCII (American standard code for information interchange) i 963:

Mange gode forsøk u ASCII ble etter hvert brukt av de fleste. u Det er lett å sjekke om et tegn er et siffer eller en bokstav. u Det er lett å konvertere fra liten til stor bokstav. d Mangler ÆØÅ og andre bokstaver og tegn. Det siste ga opphav til et utall av lokale varianter der for eksempel [\]{ } ble erstattet av ÆØÅæøå. Dette førte til «Gj vik-syndromet».

April 995, DFL, Ifi/UiO Mange gode forsøk Latin- En klart bedre løsning ble ISO 8859- (Latin-). Den (og varianter) er ennå i bruk. 2 2 2 3 3 3 4 4 4 5 5 5 6 6 6 7 7 7 8 8 9 9 2 A 3 B 2 4 C 3 5 D 4 6 E 5 7 F 6 2 7 2 8 22 2 9 23 3 2 24 4 2 25 5 22 26 6 23 27 7 24 3 8 25 3 9 26 32 A 27 33 B 28 34 C 29 35 D 3 36 E 3 37 F ISO 8859 4 64 96 4 28 2 6 24 32 2 33 4! " # $ % & ( ) * +,. / 2 3 4 5 6 7 8 9 : ; < = >? 2 34 42 22 35 43 23 36 44 24 37 45 25 38 46 26 39 47 27 4 5 28 4 5 29 42 52 2A 43 53 2B 44 54 2C 45 55 2D 46 56 2E 47 57 2F 48 6 3 49 6 3 5 62 32 5 63 33 52 64 34 53 65 35 54 66 36 55 67 37 56 7 38 57 7 39 58 72 3A 59 73 3B 6 74 3C 6 75 3D 62 76 3E 63 77 3F @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ 4 65 4 66 2 42 67 3 43 68 4 44 69 5 45 7 6 46 7 7 47 72 48 73 49 74 2 4A 75 3 4B 76 4 4C 77 5 4D 78 6 4E 79 7 4F 8 2 5 8 2 5 82 22 52 83 23 53 84 24 54 85 25 55 86 26 56 87 27 57 88 3 58 89 3 59 9 32 5A 9 33 5B 92 34 5C 93 35 5D 94 36 5E 95 37 5F a b c d e f g h i j k l m n o p q r s t u v w x y z { } ~ 6 97 4 6 98 42 62 99 43 63 44 64 45 65 2 46 66 3 47 67 4 5 68 5 5 69 6 52 6A 7 53 6B 8 54 6C 9 55 6D 56 6E 57 6F 2 6 7 3 6 7 4 62 72 5 63 73 6 64 74 7 65 75 8 66 76 9 67 77 2 7 78 2 7 79 22 72 7A 23 73 7B 24 74 7C 25 75 7D 26 76 7E 27 77 7F 8 29 2 8 3 22 82 3 23 83 32 24 84 33 25 85 34 26 86 35 27 87 36 2 88 37 2 89 38 22 8A 39 23 8B 4 24 8C 4 25 8D 42 26 8E 43 27 8F 44 22 9 45 22 9 46 222 92 47 223 93 48 224 94 49 225 95 5 226 96 5 227 97 52 23 98 53 23 99 54 232 9A 55 233 9B 56 234 9C 57 235 9D 58 236 9E 59 237 9F A 6 24 ª «± ² ³ µ ¹ º» ¼ ½ ¾ A 62 242 A2 63 243 A3 64 244 A4 65 245 A5 66 246 A6 67 247 A7 68 25 A8 69 25 A9 7 252 AA 7 253 AB 72 254 AC 73 255 AD 74 256 AE 75 257 AF 76 26 B 77 26 B 78 262 B2 79 263 B3 8 264 B4 8 265 B5 82 266 B6 83 267 B7 84 27 B8 85 27 B9 86 272 BA 87 273 BB 88 274 BC 89 275 BD 9 276 BE 9 277 BF À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö Ø Ù Ú Û Ü Ý Þ ß 92 3 C 93 3 C 94 32 C2 95 33 C3 96 34 C4 97 35 C5 98 36 C6 99 37 C7 2 3 C8 2 3 C9 22 32 CA 23 33 CB 24 34 CC 25 35 CD 26 36 CE 27 37 CF 28 32 D 29 32 D 2 322 D2 2 323 D3 22 324 D4 23 325 D5 24 326 D6 25 327 D7 26 33 D8 27 33 D9 28 332 DA 29 333 DB 22 334 DC 22 335 DD 222 336 DE 223 337 DF à á â ã ä å æ ç è é ê ë ì í î ï ð ñ ò ó ô õ ö ø ù ú û ü ý þ ÿ 224 34 E 225 34 E 226 342 E2 227 343 E3 228 344 E4 229 345 E5 23 346 E6 23 347 E7 232 35 E8 233 35 E9 234 352 EA 235 353 EB 236 354 EC 237 355 ED 238 356 EE 239 357 EF 24 36 F 24 36 F 242 362 F2 243 363 F3 244 364 F4 245 365 F5 246 366 F6 247 367 F7 248 37 F8 249 37 F9 25 372 FA 25 373 FB 252 374 FC 253 375 FD 254 376 FE 255 377 FF

Den endelige løsningen Unicode Men det er bare én løsning som har fremtiden for seg: en tegnkoding som omfatter alle skriftspråk i verden. Den heter Unicode og er nå stort sett ferdig. Unicode skal omfatte alle skriftspråk som brukes eller har vært brukt Det er plass til drøyt tegn. 3 2 tegn er foreløbig definert. Mer og mer programvare (som Java) støtter Unicode.

Den endelige løsningen UTF-8 Hvordan lagre Unicode-tekst uten å bruke for mye plass på disk eller over nettet? UTF-8 bruker fra til 4 byte til å lagre et tegn: $ U+24 U+A2 =C U+2AC U+384 Unicode og UTF-8 er nå standard ved Ifi.

Hva er et bilde? Bilder Et bilde kan vises på en LCD-fargeskjerm med de tre RGB-fargene: Rød Grønn Blå (Utskrift på papir bruker CMYK (Cyan, Magenta, Yellow, black) i stedet.)

Tall Tekst Bilder Lyd Slutt Et veldig enkelt eksempel på et rasterbilde Et eksempel På Ifis hjemmeside finnes et «favicon».

Et veldig enkelt eksempel på et rasterbilde Dette er et rasterbilde på 6 6 ruter. I hver rute angir vi RGB-verdiene; her Mørk rød: R=83/255, G=47/255, B=36/255 Gjennomsiktig

Er det mulig å komprimere rasterbilder? Et rasterbilde kan ta stor plass: Favicon-en til UiO er på 6 6 3 byte = 768 B Et skjermbilde kan være på 92 2 3 byte = 6,9 MB Er det mulig å komprimere dette?

Er det mulig å komprimere rasterbilder? Fargetabell Hvis det ikke er mange ulike farger, bruk en tabell over fargene. Vårt favicon trenger da + 6 + 6 6 8 byte = 39 B

Er det mulig å komprimere rasterbilder? «Run-length»-koding I et rasterbilde er ofte piksler ved siden av hverandre like. 6 6 5, 6, 5 5, 6, 5 5, 6, 5 5, 6, 5 5, 6, 5 5, 6, 5 6 5, 6, 5 5, 6, 5 5, 6, 5 5, 6, 5 5, 6, 5 5, 6, 5 6

Tall Tekst Bilder Lyd Slutt Og om vi er villig til å godta en reduksjon i kvaliteten? For fotografier gjelder dette: På fotografier er det sjelden brå overganger. Vi mennesker kan bare skjelne et begrenset antall nyanser. Vi søker automatisk etter mønstre.

Og om vi er villig til å godta en reduksjon i kvaliteten? JPEG-formatet JPEG benytter dette til å lage en forenklet versjon av bildet. Ekte rasterbilde JPEG % JPEG 5% JPEG 25% JPEG % JPEG 5% 4,7 MB 5,5 MB,94 MB,6 MB,34 MB,24 MB (Dette er komprimering med tap. Det er umulig å komme tilbake til det opprinnelige bildet.)

Tall Tekst Bilder Lyd Slutt Originalbildet %

Kvalitet 5%

Kvalitet 25%

Kvalitet %

Kvalitet 5%

Tall Tekst Bilder Lyd Slutt En sammenligning Original Kvalitet 5%

Men hva med vektorer? Vektorgrafikk Det er også mulig å lagre bilder som linjer og kurver: : newpath 38.494 2.83464 moveto 38.494 5.44878 lineto 28.3464 5.44878 lineto 2.3242 5.44878 4.93857 2.286 4.93857 28.3464 curveto 4.93857 35.7735 lineto 36.56685 35.7735 lineto 36.56685 48.38728 lineto 2.32443 48.38728 lineto 2.32443 28.3464 lineto 2.32443 4.6295 4.667 2.83464 28.3464 2.83464 curveto closepath stroke :

Men hva med vektorer? Raster Vektor

Hva skal jeg bruke? Anbefalinger Bruk vektorgrafikk om mulig: SVG, EPS, PDF. For fotografier bruk JPEG i så god kvalitet som mulig. For annen rastergrafikk bruk PNG med så mange piksler som mulig.

Hva er lyd? Hvordan lagre lyd Lyd er bølger i luft, men de kan overføres som strøm:

Hvordan kan vi lagre lyd? Vi kan lagre lyden ved å måle strømmen med jevne mellomrom: Men for å lagre digitalt må vi måle styrken i faste intervaller:

Hvordan kan vi lagre lyd? Med disse målingene kan vi gjenskape lyden (men ikke helt nøyaktig):

Men hva med lydkvaliteten? Kvaliteten på lyden blir da avhengig av hvor ofte vi måler hvor mange trinn vi benytter til målingen CD En vanlig CD har 74 minutter spilletid med god lyd: 44 målinger («samples») per sekund 2 6 = 65 536 intervaller (dvs 2 byte) 2 kanaler + 37% feilkorreksjonsdata En CD må derfor ha plass til 783 MB.

Kan vi komprimere lyd? Er det mulig å spare plass? Høyre og venstre kanal er stort sett nesten like. Det er lurere å lagre venstre kanal samt forskjellen. I stedet for å lagre hver måling med sin verdi, holder det å lagre forskjellen. Men: På grunn av feil og spoling må man av og til lagre den ekte verdien.

Kan vi komprimere lyd? Enda mer plass kan vi spare om vi tar hensyn til hvordan vi mennesker hører: MP3 Vi kan ikke høre lyder under 2 Hz og over 2 Hz. Om vi hører en kraftig lyd med én frekvens, hører vi ikke litt svakere lyder med noe høyere frekvens. Etter å ha hørt en sterk lyd, hører vi dårligere en tid etterpå (inntil,2 s). MP3 utnytter dette og tillater til dels sterk komprimering: Ekte CD MP3 «CD-kvalitet» MP3 «FM-radio» MP3 «telefonkvalitet» 4 kb/s ca 2 kb/s ca 6 kb/s ca kb/s

Hva har vi nevnt i dag? Oppsummering Alt er bit i en datamaskin. Det finnes ulike typer tallverdier, og programmereren må velge riktig. Det er mange ulike tegnkodinger å forholde seg til (ennå). Rasterbilder og vektorbilder er nyttige til hvert sitt formål. Lydkoding med MP3 er blitt en standard, men vi kan velge kvaliteten.