Datatyp
Från Rilpedia
I programspråk är en datatyp ett attribut för data som berättar för datorn (och programmeraren) vilken typ datan tillhör.
Innehåll |
Datatyper
Maskindatatyper
Primitiva datatyper
Till primitiva datatyper räknas bland annat heltal, flyttal och boolska värden.
Sammansatta typer
Abstrakta typer
En abstrakt datatyp är inom datorprogrammering en datatyp som förutom att definiera själva datats art (datatypen) även definierar de operationer som är tillåtna på detta data. Man säger att en abstrakt datatyp kapslar in såväl datat som operationer på detta data.
En abstrakt datatyp kan sägas vara en teoretisk beskrivning av en klass i ett objektorienterat programmeringsspråk. Implementation av abstrakta datatyper förutsätter dock inte att det programmeringsspråk man väljer har stöd för objektkonstruktioner - det går bra att skapa abstrakta datatyper i såväl funktionella som imperativa programmeringsspråk så länge dessa är strukturerade och ger stöd för funktionsanrop och godtyckliga definitioner av datastrukturer.
En väldefinerad abstrakt datatyp kännetecknas bland annat av att den har ett gränssnitt (ett API) som tillåter en användare att använda denna utan att behöva göra några antaganden om hur den underliggande implementationen är utförd.
Ett exempel på en abstrakt datatyp kan till exempel vara en Lista. En lista består av element (dvs listans rader), och möjligheten att lägga till element och att stryka bort dem. APIet för en abstrakt datatyp Lista kan således vara
- Create (Skapa)
- Add (Lägg till element)
- Get (Hämta ett visst element från listan)
- Remove (Ta bort/stryk över element)
- Destroy (Riv sönder/Kasta bort listan)
Själva datatypen är alltså Lista, och de definierade operationerna är Create, Add, Get, Remove och Destroy.
Pekare och referenstyper
Pekare är en datatyp som refererar till en annan datatyp på en annan plats i minnet på en dator. En sträng (char*, i C) är egentligen en pekare till den första minnesadressen i strängen. Exempelvis finns strängen "Hello World" i minnet och hänvisas till av en pekare, så pekar pekaren på den första adressen - vilket är den plats där 'H' finns lagrat i minnet på datorn.
Algebraiska typer
Objekttyper
Funktionstyper
Informell beskrivning
I en dator lagras och hanteras data på olika sätt beroende på vilken datatyp datat har.
I grund och botten klarar en dator bara av att hantera två saker, nämligen begrepper "1" och begreppet "0" - sant eller falskt. Genom att kombinera dessa binära värden eller bitvärden på olika sätt kan man sedan representera olika datatyper, exempelvis heltalsdata, flyttalsdata, realtalsdata och textsträngar.
I de flesta datorarkitekturer är heltalsdata den grundläggande datatypen, och alla andra datatyper är definierade i termer av denna.
- Ett heltal representeras exempelvis i moderna datorer normalt av 32 bits - alltså 32 ettor och nollor, där de olika bitarnas position är av betydelse.
- Ett reellt tal representeras oftast som ett rationellt tal - en kvot mellan två heltalsrepresentationer av exponenter i 2-potenser. Realtalet "2.0" kan alltså representeras av heltalen "2" och "1", där datorn tolkar detta som "22/21", alltså 4/2.
- Ett flyttal representeras normalt av två realtalsdata - ett realtal för basen och ett realtal för exponenten. Exempel 211/239.
- En bokstav representeras av ett heltal som mappas på en teckentabell i någon form, exempelvis den europeiska ASCII-tabellen ISO 8859.
Vissa datatyper är implementerade i själva processorn, vissa implementeras av det programspråk som används vid programmering, och ytterligare andra definieras av den som skriver programmet.
De operationer som kan utföras på ett givet data beror på vilken datatyp datat har. Även om det går att definiera en additionsoperation på bokstavsdata (char, se nedan), så är det sällan meningsfullt, på samma sätt som det inte heller är meningsfullt att kunna sammanfoga två heltal.
Formell beskrivning
Datatyp; tal inom datateknik som representerar en begränsad storhet. Mer avancerade former av datatyper är uppbyggda av de inbyggda datatyper en processor har, vilket även inkluderar funktioner och rutiner då dessa i sig själva representeras av en inbyggd datatyp (s.k. pekare).
Inbyggda datatyper
Nyckelord | Storlek (bitar) | Talrepresentation | Storleksintervall |
---|---|---|---|
(signed) char | 8 | Heltal | -128...127 |
unsigned char | 8 | Heltal | 0...255 |
char (i Java) | 16 | Unicode-tecken | motsvarar 0-0xffff |
(signed) short (int) | 16 | Heltal | -32768...32767 |
unsigned short (int) | 16 | Heltal | 0...65535 |
(signed) long (int) | 32 | Heltal | -231...231-1 |
unsigned long (int) | 32 | Heltal | 0...232-1 |
(signed) long long | 64 | Heltal | -263...263-1 |
unsigned long long | 64 | Heltal | 0...264-1 |
long (i Java) | 64 | Heltal | -263...263-1 |
int | 16, 32 el. 64 | Heltal | Beror på processorn. Ofta det högsta heltalet, ex. long eller long long. |
int (i Java) | 32 | Heltal | -231...231-1 |
float | 16 | Flyttal | Ingen standard. Exempel 1: OpenEXP and Cg för NVIDIA: 5 bitars exponent och 10 bitars mantissa[1] Det finns även historiska exempel på minidatorer under 70-80- talet. |
float | 32 | Flyttal med enkelprecision i 32-bitars arkitekturer | IEEE 754-1985: 8 bitar exponent 23 bitar mantissa |
double | 32 | Flyttal med dubbelprecision i 16-bitars arkitekturer | IEEE 754-1985: 8 bitar exponent 23 bitar mantissa |
double | 64 | Flyttal | IEEE 754-1985: 11 bitar exponent 52 bitar mantissa |
long double | 64 eller mer | Flyttal | IEEE 754-1985: 11 bitar exponent 52 bitar mantissa; det finns även icke-standard implementioner, t.ex. AIX 128-bitars long double som består av ett par av IEEE 754 64-bitars flyttal som summeras ihop och ger högre precision [2]; i x86-arkitekturen använder man sig även av 80-bit extended precision (80 bits mantissa och 16 bitar exponent, tillsammans 12 bytes). |
Tabell över datatyper inom dataprocessorer.
Rationella tal kan även representeras av heltalen char, short och long genom att dela in mantissan i de högre bitarna, och decimalerna i de lägre bitarna. På detta sätt fungerar addition och subtraktion som om de vore rena heltal.
Se även
Referenser
- ↑ [http://www.lri.fr/~de/Estimedia05.pdf#search=%22float%2016-bit%22 Exempel på användning av 16-bitars float.
- ↑ http://www.unet.univie.ac.at/aix/aixprggd/genprogc/128bit_long_double_floating-point_datatype.htm