Loading AI tools
Från Wikipedia, den fria encyklopedin
I programspråk är en datatyp ett attribut för data som berättar för datorn (och programmeraren) vilken sorts information data bär på. Eftersom all information i datorn, även text och bilder, internt hanteras som tal är datatyper ett sätt att se skillnad på vad talen representerar.
I många programspråk bestämmer programmeraren vilken datatyp som ska kunna lagras i en variabel. Försöker man lagra värden av en annan typ kan fel uppstå. Vissa fel kan upptäckas automatiskt redan när koden skrivs eller kompileras, medan andra fel kan få programmet att krascha eller ge oväntade resultat när det körs, eftersom programmet tror att datan representerar något annat än vad den egentligen innehåller. Jämför med vad som kan hända ifall någon lagrar gift i ett mjölkpaket.
Hur och när datatypen för en variabel bestäms är något som skiljer mycket mellan olika programmeringsspråk. Det är därför vanligt att man klassificerar språk efter deras typsystem.
Med primitiva datatyper menas de grundläggande typer som tillhandahålls direkt av programspråket, såsom heltal, flyttal och boolska värden, och vilka ofta fungerar som byggstenar till mer komplexa typer. Till skillnad från sammansatta och abstrakta typer, är det i de flesta programspråk inte tillåtet för ett program att förändra eller omdefiniera språkets primitiva typer.
En abstrakt datatyp är en datatyp som, förutom att definiera vilken sorts data som lagras (datatyp), även definierar de operationer som är tillåtna på data av detta slag. Man säger att en abstrakt datatyp kapslar in datan tillsammans med de operationer som kan utföras på datan.
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äldefinierad abstrakt datatyp kännetecknas bland annat av att den har ett gränssnitt (ett API) som tillåter en användare att använda datatypen utan att behöva göra några antaganden om hur den underliggande implementationen är utförd.
Listor är ett exempel på en abstrakt datatyp. En lista består dels av sina rader (listans data), men också av möjligheten att lägga till och stryka bort rader (listans operationer). API:et för den abstrakta datatypen Lista skulle således kunna definiera följande operationer:
Själva datatypen är alltså Lista, och de definierade operationerna är Create, Add, Get, Remove och Destroy.
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.
I en dator lagras och hanteras data på olika sätt beroende på vilken datatyp datan har.
I grund och botten klarar en dator bara av att hantera två saker, nämligen begreppet "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.
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å en given bit data beror på vilken datatyp datan 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.
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).
Olika processorarkitekturer har olika uppsättningar inbyggda datatyper. Vilka typer programspråket gör tillgängliga för programmeraren och vilka namn de betecknas med varierar kraftigt mellan olika programspråk och i lägre grad även mellan olika implementationer av samma språk. Nedan följer några exempel på typnamn som brukar finnas i språk besläktade med C.
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 eller 64 | Heltal | -231...231-1 eller -263...263-1 |
unsigned long (int) | 32 eller 64 | Heltal | 0...232-1 eller 0...264-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. |
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 andra implementationer utöver standarden:
|
Tabell över datatyper inom dataprocessorer.
Rationella tal kan även representeras av heltalen char, short och long genom att dela in mantissan (se Flyttal) 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.