Primitiv datatype - Primitive data type
Inden for datalogi er primitiv datatype en af følgende:
- en grundtype er en datatype leveret af et programmeringssprog som en grundlæggende byggesten. De fleste sprog tillader mere komplicerede sammensatte typer at blive rekursivt konstrueret ud fra grundlæggende typer.
- en indbygget type er en datatype, som programmeringssproget giver indbygget support til.
I de fleste programmeringssprog er alle grundlæggende datatyper indbygget. Derudover indeholder mange sprog også et sæt sammensatte datatyper.
Afhængigt af sproget og dets implementering kan primitive datatyper måske ikke have en-til-en-korrespondance med objekter i computerens hukommelse. Imidlertid forventer man normalt, at operationer på grundlæggende primitive datatyper er de hurtigste sprogkonstruktioner, der findes. Heltalstilsætning kan f.eks. Udføres som en enkelt maskininstruktion, og nogle processorer tilbyder specifikke instruktioner til at behandle sekvenser af tegn med en enkelt instruktion. C -standarden nævner især, at "et" almindeligt "int -objekt har den naturlige størrelse, der foreslås af udførelsesmiljøets arkitektur." Dette betyder, at int
det sandsynligvis vil være 32 bit langt på en 32-bit arkitektur. Grundlæggende primitive typer er næsten altid værdityper .
De fleste sprog tillader ikke adfærd eller muligheder for primitive (enten indbyggede eller grundlæggende) datatyper at blive ændret af programmer. Undtagelser inkluderer Smalltalk , som gør det muligt at udvide alle datatyper inden for et program, tilføje til de operationer, der kan udføres på dem eller endda redefinere de indbyggede operationer.
Oversigt
Den faktiske række primitive datatyper, der er tilgængelig, afhænger af det specifikke programmeringssprog, der bruges. For eksempel i C # , strenge er en sammensat, men indbygget datatype, mens der i moderne dialekter af BASIC og i JavaScript , er de sidestilles med en primitiv datatype, der er både basisk og indbygget.
Klassiske grundlæggende primitive typer kan omfatte:
-
Tegn (
character
,char
); -
Integer (
integer
,int
,short
,long
,byte
) med en række præcisionsniveau ; -
Flydende decimaltal (
float
,double
,real
,double precision
); -
Fixed-point nummer (
fixed
) med en række præcisioner og en programmeret valgt skala . - Boolske , logiske værdier sand og falsk .
- Reference (også kaldet en markør eller håndtag eller beskrivelse ), en værdi, der henviser til et andet objekt. Referencen kan være en hukommelsesadresse eller et indeks til en samling værdier.
- Ovenstående primitiver understøttes generelt mere eller mindre direkte af computerhardware, bortset fra muligvis flydende punkt, så operationer på sådanne primitiver er normalt ret effektive. Nogle programmeringssprog understøtter tekststrenge som en primitiv (f.eks. BASIC), mens andre behandler en tekststreng som en række tegn (f.eks. C). Nogle computerhardware (f.eks. X86) har instruktioner, der hjælper med at håndtere tekststrenge, men komplet hardware -understøttelse af tekststrenge er sjælden.
Strenge kan være en hvilken som helst serie af tegn i den brugte kodning . For at adskille strenge fra kode omslutter de fleste sprog dem med enkelt eller dobbelt anførselstegn. For eksempel "Hello World" eller "Hello World". Bemærk, at "200" kan forveksles med en heltalstype, men faktisk er en strengtype, fordi den er indeholdt i dobbelte anførselstegn.
Mere sofistikerede typer, der kan indbygges, omfatter:
- Tuple i Standard ML , Python , Scala , Swift , Elixir
- Liste i Common Lisp , Python , Scheme , Haskell
- Kompleks nummer i C99 , Fortran , Common Lisp , Python , D , Go
- Rationelt tal i Common Lisp , Haskell
- Associeret array i Perl , PHP , Python , Ruby , JavaScript , Lua , D , Go
- Førsteklasses funktion på alle funktionelle sprog, JavaScript , Lua , D , Go og i nyere standarder for C ++ , Java , C# , Perl
Specifikke primitive datatyper
Heltalstal
En heltal datatype repræsenterer en vis række matematiske heltal . Heltal kan enten være signeret (tillader negative værdier) eller usignerede (kun ikke-negative heltal ). Almindelige områder er:
Størrelse ( bytes ) | Størrelse ( bits ) | Navne | Signeret rækkevidde (forudsat to's supplement til signeret ) | Usigneret sortiment |
---|---|---|---|---|
1 byte | 8 bits |
Byte , oktet , minimumsstørrelse på char i C99 (se grænser. H CHAR_BIT)
|
−128 til +127 | 0 til 255 |
2 bytes | 16 bits |
x86 ord , minimumsstørrelse på short og int i C
|
−32.768 til +32.767 | 0 til 65.535 |
4 bytes | 32 bits | x86 dobbelt ord, minimumsstørrelse på long i C, faktisk størrelse int for de fleste moderne C -kompilatorer, markør til IA -32 -kompatible processorer
|
−2.147.483.648 til +2.147.483.647 | 0 til 4.294.967.295 |
8 bytes | 64 bits | x86 firdobbelt ord, minimumsstørrelse på long long i C, faktisk størrelse long for de fleste moderne C -kompilatorer, markør til x86-64 -kompatible processorer
|
−9,223,372,036,854,775,808 til +9,223,372,036,854,775,807 | 0 til 18.446.744.073.709.551.615 |
ubegrænset/8 | ubegrænset | Bignum | –2 ubegrænset /2 til +(2 ubegrænset /2 - 1) | 0 til 2 ubegrænset - 1 |
Bogstaver for heltal kan skrives som almindelige arabiske tal , der består af en række cifre og med negation angivet med et minustegn før værdien. De fleste programmeringssprog tillader imidlertid ikke brug af kommaer eller mellemrum til ciffergruppering . Eksempler på heltalsbokstaver er:
- 42
- 10000
- -233000
Der er flere alternative metoder til at skrive heltalsbokstaver på mange programmeringssprog:
- De fleste programmeringssprog, især dem, der er påvirket af C , præfikerer et helt tal bogstaveligt med 0X eller 0x for at repræsentere en hexadecimal værdi, f.eks. 0xDEADBEEF . Andre sprog kan bruge en anden notation, f.eks. Tilføjer nogle samlingssprog et H eller h til slutningen af en hexadecimal værdi.
- Perl , Ruby , Java , Julia , D , Rust og Python (startende fra version 3.6) tillader indlejrede understregninger for klarhed, f.eks. 10_000_000 , og fastform i Fortran ignorerer indlejrede mellemrum i heltalsbokstaver.
- I C og C ++ angiver et førende nul en oktalværdi , f.eks. 0755 . Dette var primært beregnet til at blive brugt med Unix -tilstande ; det er imidlertid blevet kritiseret, fordi normale heltal også kan føre med nul. Som sådan præfikserer Python , Ruby , Haskell og OCaml oktalværdier med 0O eller 0o efter det layout, der bruges af hexadecimale værdier.
- Flere sprog, herunder Java , C# , Scala , Python , Ruby og OCaml , kan repræsentere binære værdier ved at præfiksere et tal med 0B eller 0b .
Flydende tal
Et flydende tal repræsenterer et rationelt tal med begrænset præcision, der kan have en brøkdel. Disse tal gemmes internt i et format, der svarer til videnskabelig notation , typisk i binær men undertiden i decimal . Fordi floating-point-tal har begrænset præcision, er kun en delmængde af reelle eller rationelle tal nøjagtigt repræsentative; andre tal kan kun repræsenteres cirka.
Mange sprog har både en enkelt præcision (ofte kaldet "float") og en dobbelt præcisionstype .
Bogstaver til flydende tal omfatter et decimalpunkt og bruger typisk e eller E til at betegne videnskabelig notation. Eksempler på floating-point-bogstaver er:
- 20.0005
- 99,9
- -5000,12
- 6.02e23
Nogle sprog (f.eks. Fortran , Python , D ) har også en kompleks nummertype, der består af to flydende tal: en reel del og en imaginær del.
Fixed-point tal
Et fastpunktsnummer repræsenterer et rationelt tal med begrænset præcision, der kan have en brøkdel. Disse tal gemmes internt i et skaleret heltal, typisk i binær men undertiden i decimal . Fordi fastpunktsnumre har begrænset præcision, er det kun en delmængde af reelle eller rationelle tal, der er nøjagtigt repræsentative; andre tal kan kun repræsenteres cirka. Fixed-point tal har også en tendens til at have et mere begrænset værdiområde end flydende punkt , og derfor skal programmøren være forsigtig med at undgå overløb i mellemliggende beregninger såvel som det endelige resultat.
Booleanske
En boolsk type, typisk betegnet "bool" eller "boolean", er typisk en logisk type, der enten kan have værdien "true" eller værdien "false". Selvom kun en bit er nødvendig for at rumme værdisættet "sand" og "falsk", implementerer programmeringssprog typisk boolske typer som en eller flere bytes.
Mange sprog (f.eks. Java , Pascal og Ada ) implementerer booleans, der overholder begrebet boolean som en tydelig logisk type. Sprog kan dog implicit implicit konvertere booleanere til numeriske typer til tider for at give udvidet semantik til booleanske og boolske udtryk eller for at opnå bagudkompatibilitet med tidligere versioner af sproget. For eksempel havde tidlige versioner af C -programmeringssproget, der fulgte ANSI C og dets tidligere standarder, ikke en dedikeret boolsk type. I stedet fortolkes numeriske værdier på nul som "falsk", og enhver anden værdi fortolkes som "sand". Den nyere C99 tilføjede en tydelig boolsk type, der kan inkluderes med stdbool.h , og C ++ understøtter bool
som en indbygget type og "sand" og "falsk" som reserverede ord.
Karakterer og strygere
En tegntype (typisk kaldet "char") kan indeholde et enkelt bogstav , ciffer , tegnsætningstegn , symbol , formateringskode, kontrolkode eller en anden specialiseret kode (f.eks. Et byteordremærke ). I C , char
defineres som den mindste adresserbare enhed hukommelse. På de fleste systemer er dette 8 bits ; Flere standarder, f.eks. POSIX , kræver, at den er i denne størrelse. Nogle sprog har to eller flere tegntyper, f.eks. En enkeltbyte-type for ASCII- tegn og en multi-byte-type for Unicode- tegn. Udtrykket "tegntype" bruges normalt selv for typer, hvis værdier mere præcist repræsenterer kodenheder , f.eks. En UTF-16 -kodenhed som i Java (understøttet begrænset til 16-bit tegn) og JavaScript .
Tegn kan kombineres til strenge . Strengdataene kan indeholde tal og andre numeriske symboler, men behandles som tekst. For eksempel kan de matematiske operationer, der kan udføres på en numerisk værdi (f.eks. 200) generelt ikke udføres på den samme værdi, der er skrevet som en streng (f.eks. "200").
Strenge implementeres på forskellige måder afhængigt af programmeringssproget. Den enkleste måde at implementere strenge på er at oprette dem som en række tegn efterfulgt af et afgrænsende tegn, der bruges til at signalere slutningen af strengen, normalt NUL . Disse omtales som null-terminerede strenge og findes normalt på sprog med en lav hardware-abstraktion , såsom C og Assembly . Selvom de er lette at implementere, er null -terminerede strenge blevet kritiseret for at forårsage bufferoverløb . De fleste script-sprog på højt niveau, såsom Python , Ruby og mange BASIC- dialekter , har ingen separat tegntype; strenge med en længde på en bruges normalt til at repræsentere enkelte tegn. Nogle sprog, såsom C ++ og Java , har evnen til at bruge null-terminerede strenge (normalt til bagudkompatibilitetstiltag), men giver desuden deres egen klasse til strenghåndtering ( std::string
og java.lang.String
henholdsvis) i standardbiblioteket.
Der er også en forskel på, om strenge er mutable eller immutable i et sprog. Omskiftelige strenge kan ændres efter deres oprettelse, hvorimod uforanderlige strenge opretholder en konstant størrelse og indhold. I sidstnævnte er den eneste måde at ændre strenge på at oprette nye. Der er både fordele og ulemper ved hver tilgang: Selvom uforanderlige strenge er meget mindre fleksible, er de enklere og helt trådsikre . Nogle eksempler på sprog, der bruger mutable strenge, omfatter C ++ , Perl og Ruby , hvorimod sprog, der ikke inkluderer JavaScript , Lua , Python og Go . Et par sprog, f.eks. Objective-C , giver forskellige typer til foranderlige og uforanderlige strenge.
Bogstaver til tegn og strenge er normalt omgivet af anførselstegn : nogle gange bruges enkelte anførselstegn ( ' ) til tegn, og dobbelte anførselstegn ( " ) bruges til strenge. Python accepterer begge varianter for sin strengnotation.
Eksempler på tegn i C -syntaks er:
- 'EN'
- '4'
- '$'
- '\ t' ( faneblad )
Eksempler på strenglitteraler i C -syntaks er:
- "EN"
- "Hej Verden"
- "Der er 4 katte."
Numeriske datatypeområder
Hver numerisk datatype har sin maksimale og mindste værdi kendt som intervallet . Forsøg på at gemme et nummer uden for området kan føre til compiler/runtime -fejl eller til forkerte beregninger (på grund af afkortning ) afhængigt af det sprog, der bruges.
Intervallet for en variabel er baseret på antallet af bytes, der bruges til at gemme værdien, og en heltal datatype er normalt i stand til at gemme 2 n værdier (hvor n er antallet af bits, der bidrager til værdien). For andre datatyper (f.eks. Floating-point- værdier) er området mere kompliceret og vil variere afhængigt af den metode, der bruges til at gemme det. Der er også nogle typer, der ikke bruger hele bytes, f.eks. En boolean, der kræver en enkelt bit , og repræsenterer en binær værdi (selvom der i praksis ofte bruges en byte, hvor de resterende 7 bits er overflødige). Nogle programmeringssprog (f.eks. Ada og Pascal ) tillader også den modsatte retning, det vil sige, at programmøren definerer det område og den præcision, der er nødvendig for at løse et givet problem, og kompilatoren vælger automatisk den mest passende heltal eller floating-point type.
Se også
- Sprog primitivt
- Liste over datastrukturer § Datatyper
- Objekttype
- Primitiv indpakningsklasse
- Variabel (datalogi)
Referencer
eksterne links
- Medier relateret til primitive typer på Wikimedia Commons