Datorns språkPå denna sida ges en kort introduktion till olika termer och begrepp som används i samband med representation av data i en dator. Syftet är att ge en kort introduktion, så att du snabbt kommer in i den terminologi som används, samtidigt som en del metoder för olika talsystem beskrivs. Det kan också läsa mer om hur en dator fungerar på sidan om Datorteknik. Detta kan du läsa antingen före eller efter att du läst denna sida om datorns språk. |
|
Datorer och människor hanterar inte information
på samma sätt. För att vi ska kunna utnyttja en dator på
ett effektivt sätt måste vi se till att datorer och människor
förstår varandra. I datorn används koder för att
representera all information. Dessa koder är uppbyggda av endast två
olika värden; 0 och 1 (eller t.ex. spänningen 0V
respektive 5V, eller en omkopplare är tillslagen eller ej). Detta är
lätt att elektroniskt representera, så därför används
koder och ett talsystem med endast två värden.
Decimala tal
Det decimala talsystemet är det som vi människor normalt använder för att representera tal och utföra beräkningar.
Det som är karakteristiskt för detta talsystem är:
| Exempel: |
| 6454 = 6·1000 + 4·100 + 5·10 + 4·1 = 6·103 + 4·102 + 5·101 + 4·100 |
Detta exempel visar att en siffras vikt räknas ut som en tiopotens, 10i, där i är siffrans position räknat från höger med början på 0. Basen 10 är detsamma som antalet siffror i talsystemet.
Jämför med additions- och subtraktionssystem
På samma sätt som det decimala talsystemet är uppbyggt, kan man sätta ihop ett talsystem med ett annat antal siffror. Siffrornas vikter används då för omräkning till decimal form.
Om antalet siffror i talsystemet betecknas med r, så bestäms en siffras vikt som ri, där i är siffrans position i ett tal räknat från höger med början på 0. Siffrans di:s värde omräknat till decimal form blir då di·ri, där di betecknar siffran i position i.
Ett tal dn...d2d1d0 i ett talsystem med r siffror omräknas till decimal form med formeln:
dn·rn + ... + d2·r2 + d1·r1 + d0·r0
Binära tal
Den modell som används för ett generellt talsystem kan nu användas för att definiera det binära talsystemet, som endast har två siffror; 0 och 1.
Vikterna för de binära siffrorna blir 2i. För de 8 första siffrorna blir de 27, 26, ... , 20, dvs 128, 64, 32, 16, 8, 4, 2, 1.
| Exempel: |
| Det binära talet 1101 kan räknas om till
decimal form på följande sätt:
1101B = 1·23 + 1·22 + 0·21 + 1·20 = 1·8 + 1·4 + 0·2 + 1·1 = 13D Indexen B och D används här för att beteckna att talet är på binär respektive decimal form (ibland används indexen 2 respektive 10 för detta). |
| Talen 0 till 9 på decimal och binär form |
Decimalt Binärt
0 0000
1 0001
2 0010
3 0011
4 0100
5 0101
6 0110
7 0111
8 1000
9 1001
|
Dessa fördjupningar är till för den intresserade. De är inte nödvändiga för att förstå resten av innehållet på denna sida. Hexadecimala koder brukar dock ofta förekomma i samband med koder för färger i RGB-systemet. T.ex. används detta vid färgangivelser i språket HTML, så det kan vara bra att känna till vad hexadecimala tal är.
Fördjupningar:
En siffra i det binära talsystemet kallas för bit.
Bit = Binary digit![]()
En grupp med åtta bitar kallas för byte.
Byte = en grupp med 8 bitar![]()
I en byte kan man representera tal mellan 0 och 255, alltså 256 olika tal eller koder.
För att se hur många tal man kan representera i en byte kan man se vilka tal det största och det minsta talet motsvarar. Det minsta talet får vi om alla bitar innehåller en 0:a. Detta måste då också motsvara talet 0 i det decimala talsystemet. Det största talet får vi om alla bitar innehåller en 1:a. Detta motsvarar då talet 1·28+1·27+...+1·22+1·21+1·20 = 255. De tal vi kan representera med alla möjliga bitmönster i en byte blir talen 0 till 255, dvs 256 olika tal. Det betyder att vi har 256 olika koder. Som vi senare ska se, ska vi använda oss av dessa koder för att också kunna representera annat än bara tal.
Ofta anges enheter i tusentals eller miljontals bytes eller bitar. Man använder då prefixen kilo (K), mega (M) och giga (G). Minnesstorlekar mäts i bytes och dataöverföring i bitar per sekund. Här exmplifieras begreppen kilo, mega och giga med hjälp av bytes.
210 bytes = 1 024 bytes
210 KB = 1 024 · 1 024 = 1 048 576 bytes ("drygt en miljon")
210 MB = 1 024 · 1 048 576 = 1 073 741 824 bytes ("en hel del" eller "drygt en miljard")
Ett kilo är ju vanligtvis 1000, men i datorsammanhang har man definierat ett kilo som 210, dvs 1024. Ofta räcker dock att hålla reda på att det är ungefär 1000. Observera dock att det används versaler för prefixen. K betyder 1024, medan k betyder 1000 (t.ex. i kg, kilogram).
De flesta har en uppfattning om skillnaden mellan ett tusen och en miljon, men kommer man upp i högre tal blir uppfattningen om skillnaderna mer diffus. Både en miljon och en miljard är väldigt mycket. Följande bild (som dock ej är skalenlig) illustrerar skillnaderna mellan kilo, mega och giga.
Om ett kilo representeras av tjockleken på ett kreditkort, 0,3 mm,
så motsvarar mega en stående A4-pärm, 31 cm,
och giga Eiffeltornets höjd, 321 m.
Vanliga storlekar på olika enheter
Text, dvs bokstäver (både gemena och versala) och andra tecken kodas med sekevenser av 0:or och 1:or.
Från början hade man ingen standard för detta, utan olika datortillverkade hade själva infört olika koder för tecknen. Detta blev naturligtvis ett problem, då man sedan började överföra information från ett datorsystem till ett annat. Det som var skrivet i ett system blev bara nonsens i ett annat. På 50-talet infördes i USA därför standarden ASCII. I denna standard används sju bitar för att representera tecknen. I sju bitar får man plats med 128 olika bitmönster (koder), vilket räckte för de bokstäver och tecken som används i USA.
Då man tar med tecken som används i Europa, t.ex. åäöéëê etc räckte inte dessa 128 koder längre till. Därför utökade man ASCII-koden med ytterligare 1 bit och kodade tecknen med 8 bitar, dvs en hel byte. Då fick man 256 olika koder. Man gjorde dock samma misstag som tidigare igen. Olika datortillverkade utnyttjade dessa extra 128 koder på olika sätt. Tecknen åäö är därför kodade olika i olika operativsystem. På Internet har sedan detta standardiserats i en ISO-tandard kallad Latin 1. Det är denna kod som i "västvärlden" (eller egentligen alla länder med det latinska alfabetet) används på webben.
För länder med andra alfabet, t.ex. Ryssland, Kina och Japan räcker det dock inte med Latin 1. Då har man tagit fram en standard med 2 bytes per tecken, kallad Unicode.
ASCII
Latin 1
Unicode
Bilder kan representeras på olika sätt; antingen med bildpunktsgrafik eller som objekt som ritas ut med hjälp av matematiska formler (vektorgrafik). Oavsett hur bilden lagras ritas den upp som en bildpunktsmatris (bitmap på engelska) på bildskärmen eller i en skrivare. En bildpunkt kallas pixel (picture element).
Färg
I punktgrafik har man en representation av varje enskild punkt. För dessa måste man då också ange vilken färg de har och för detta används en kod med 0:or och 1:or. Ju fler bitar man har, desto fler färger kan representeras. Varje färgnyans får en unik kod.
| Exempel: | |
1 bit per pixel
|
![]() |
8 bitar per pixel
|
![]() |
16 bitar per pixel
|
![]() |
Använder man endast 1 bit för varje bildpunkt, har man endast två värden och kan då endast ha två färger, t.ex. svart och vitt. Fotografier blir då naturligtvis inte särskilt bra.
Utökar vi det till 8 bitar per bildpunkt, får vi 256 olika koder och kan då använda oss av totalt 256 olika färger. Fotografgiet blir då bättre, men inte tillräckligt bra. Ett fotografi innehåller ofta fler än 256 färger, så resultatet blir en grynig eller flammig bild, då en del färgnyanser måste anpassas till de som finns i de 256 som vi valt att representera.
Då kan vi utöka det till 2 bytes, dvs 16 bitar, per bildpunkt och får då plats med drygt 65000 olika färgnyanser. Detta räcker till för de flesta fotografier, om de endast ska visas på bildskärmen. Man kan naturligtvis också utöka till tre eller fyra bytes per bildpunkt, om man vill ha fler färgnyanser, men då går det ju också åt mer minnesutrymme för att representera bilden.
I ovanstående exempel antas man ha en färgpalett, där varje färg i paletten har en unik kod. Antalet färger bestäms då av hur många bitar man använder för att representera färgerna.
Ett annat
sätt att representera färger är att använda RGB-systemet,
som är det som används i vanliga TV-apparater och bildskärmar.
Färgerna skapas genom att mixa olika nyanser (intensiteter) av Röd,
Grön och Blå färg.
Använder man en byte per färg, av dessa tre, går det totalt åt tre bytes. I en byte kan man ha 256 olika koder, så för varje färg har vi 256 olika nyanser. Totalt kan vi då få 256x256x256 = drygt 16 miljoner olika färger.
Värdet i varje byte kan skrivas som ett hexadecimalt tal med två siffror, och då får vi färgkoder som skrivs som sexsiffriga koder i det hexadecimala systemet.
| Exempel på färgkoder |
Färg Hexadecimal kod
Röd FF0000
Grön 00FF00
Blå 0000FF
Gul FFFF00
Lila FF00FF
Ljusblå 00FFFF
Vit FFFFFF
Svart 000000 |
Ljud är analoga signaler (ljudvågor) som i princip kan anta vilka värden (amplituder) som helst och förändras med vilken frekvens som helst. I praktiken är detta begränsat, eftersom de flesta människor inte hör ljud med en högre frekvens än c:a 20 kHz.
I datorn måste ljud liksom allt annat representeras med 0:or och 1:or. Detta innebär att ett analogt ljud måste omvandlas till sekvenser av 0:or och 1:or då det tas in i datorn. Då det sedan spelas upp omvandlas det till en analog signal igen som kommer ut ur högtalaren.
Omvandlingen till en binär sekvens görs genom att ljudet digitaliseras. Ljudkurvan delas in i ett antal nivåer (0-7 i nedanstående figur). Därefter mäter man ljudet med med jämna mellanrum (detta kallas sampling, sample = provtagning).
De digitala värdena (siffrorna under diagrammet) kan för ovanstående figur representeras med följande binära sekvens:
010 011 110 111 110 100 100 101 101 100 011 010
Frågan är då hur många nivåer man måste ha och hur ofta man behöver ta mätvärden. Det man vill är att ha tillräckligt fin indelning för att säkert få med alla förändringar. Alltså tillräckligt många nivåer så att förändringar i ljudkurvans amplitud hamnar i olika nivåer. Antalet nivåer brukar vara 2k, där k är ett heltal ofta så att vi får ett helt antal bytes, t.ex. 28 eller 216. Det används alltså t.ex. 8 eller 16 bitar för att representera de digitala ljudnivåerna.
Då vi kan höra ljudfrekvenser på upp till 20kHz, bör provtagningarna ske med drygt 40kHz, för att vi ska vara säkra på att få med alla förändringar i frekvensen. För en del ljud behövs inte så bra kvalitet, så samplingsfrekvensen brukar ligga på mellan 5 och 44 kHz. För tal brukar det bli tillräckligt bra kvalitet med 11 kHz. För musik bör man ha åtminstone 22 kHz. En musik-CD har 16-bitars upplösning och en frekvens på 44 kHz i två kanaler (stero).
Har man för få nivåer och för låg samplingsfrekvens finns risken att man missar snabba förändringar i ljudkurvan. Ju fler nivåer man har och ju högre frekvens man har desto bättre blir kvaliteten, men samtidigt går det naturligtvis åt mer minne.
| Exempel: |
| 10 sekunders ljud i olika kvaliteter
8 bitar (1 byte) och 5 kHz => 1·5 000·10 = 50 000 bytes = 48,8 kb 16 bitar (2 bytes) och 22 kHz => 2·22 000·10 = 440 000 bytes = 430 kb 16 bitar (2 bytes), 44 kHz, stereo (2 kanaler) => 2·44 000·2·10 = 1 760 000 bytes = 1,7 Mb |
Ovanstående exempel där storleken på ett ljud i olika kvaliteter räknas ut, visar att storleken kan bli mycket stor även för ett kort ljud. Detsamma gäller även andra medier, såsom bilder och video. Både av lagringsskäl och tidsskäl då överföring över Internet sker, finns det därför behov av att komprimera informationen. Det finns en mängd olika s.k. komprimeringsalgoritmer för olika medier. För att illustrera vad komprimering är och hur det kan gå till återgår vi till bilder, eftersom det blir lättare att visualisera.
I exemplet har vi en bild med en nalle. Denna representeras först med en färgpalett med 256 färger, dvs det används en byte för att representera färgen i varje pixel. Totalt blir detta c:a 37KB.
För att komprimera storleken ges två exempel:
Två vanliga format för bilder på webben är CompuServe Graphical Interchange Format (gif) och Joint Photograchic Experts Group (jpeg eller jpg). Ett annat format som numera också stöds av webbläsarna är Portable Network Graphics (png, utalas ping).
Gif fungerar ungefär som "samma färg upprepas" ovan och ger en komprimering utan förlust av färger. Dvs efter uppkomprimering ser bilden exakt likadan ut som före komprimering. Gif är maximerat till 256 färger och fungerar bäst för bilder med stora färgytor, t.ex. som nallen i exemplet ovan. Då bilden först reducerades till sex färger och sedan sparades som gif, blev filstorleken 3KB.
Jpeg fungerar så att vissa färgnyanser ersätts av andra liknande nyanser, för att på så sätt få större ytror i samma nyans som kan komprimeras. Detta innebär att det är en s.k. förstörande komprimering. Bilden ser inte exakt likadan ut efter uppkomprimering som före komprimering. Hur pass märkbart detta är beror dels på bilden och dels på hur pass stark komprimering man använder. I jpeg har man alltid 16,7 miljoner färger (24 bitar). Metoden fungerar bäst på fotografier och inte så bra på bilder som ovanstående nalle. Då den bilden sparades som jpeg blev filstorleken 8KB, om kvaliteten fortfarande skulle vara hyfsad.
Läs mer om användning av bilder.
Alla program som körs i datorn är också uppbyggda av 0:or och 1:or, precis som vilken annan information som helst i datorn. Är det ett program tolkas koderna som kommandon och instruktioner till datorns processor, så att den vet vad som ska utföras.
Om nu allting består av en sekvens av 0:or och 1:or, hur vet då datorn hur den ska tolka denna sekvens?
Vanligtvis vet man (dvs datorn eller det program som körs i den) vad det är för typ av information och hur den ska tolkas. Är man ute i operativsystemet och kör igång ett program så måste innehållet vara programkod. Är man i en texteditor och öpnnar ett dokument, så måste innehållet tolkas som text. Ett problem uppstår dock då man har program som kan hantera flera olika typer av information. Ett ritprogram måste t.ex. veta om det bilddokument det öppnar har t.ex. 8-bitars eller 16-bitars färggrafik. Utöver den data (de koder) som hör till informationsinnehållet, behövs alltså i datafiler lite mer information om vilken typ av information som filen innehåller.
I början av varje fil finns det filinformation som anger filtyp, filens längd, etc. Denna information anger hur innehållet ska tolkas.