Datatyper i C - heltal, flytpunkt och ogiltigt förklaras

Datatyper i C

Det finns flera olika sätt att lagra data i C, och de är alla unika från varandra. De typer av data som information kan lagras som kallas datatyper. C är mycket mindre förlåtande om datatyper än andra språk. Som ett resultat är det viktigt att se till att du förstår de befintliga datatyperna, deras förmågor och deras begränsningar.

En egenskap av C: s datatyper är att de helt beror på hårdvaran som du kör din kod på. En intpå din bärbara dator kommer att vara mindre än en intpå en superdator, så det är viktigt att veta begränsningarna för hårdvaran du arbetar med. Det är också därför datatyperna definieras som minsta - ett intvärde, som du kommer att lära dig, är minst -32767 till 32767: på vissa maskiner kommer det att kunna lagra ännu fler värden än detta.

Det finns två kategorier som vi kan dela upp i: heltal och flytande siffror. Heltals är heltal. De kan vara positiva, negativa eller noll. Siffror som -321, 497, 19345 och -976812 är alla helt giltiga heltal, men 4.5 är inte för att 4.5 inte är ett heltal.

Flytpunktsnummer är siffror med ett decimal. Liksom heltal är -321, 497, 19345 och -976812 alla giltiga, men nu gäller också 4,5, 0,0004, -324,984 och andra icke-heltal.

C låter oss välja mellan flera olika alternativ med våra datatyper eftersom de alla lagras på olika sätt på datorn. Som ett resultat är det viktigt att vara medveten om förmågan och begränsningarna för varje datatyp för att välja den lämpligaste.

Heltalsdatatyper

Tecken: char

charinnehar tecken - saker som bokstäver, skiljetecken och mellanslag. På en dator lagras tecken som siffror, så det charinnehåller helvärden som representerar tecken. Den faktiska översättningen beskrivs av ASCII-standarden. Här är ett praktiskt bord för att leta upp det.

Den faktiska storleken, som alla andra datatyper i C, beror på vilken hårdvara du arbetar med. Som ett minimum är det minst 8 bitar, så du kommer att ha minst 0 till 127. Alternativt kan du använda för signed charatt få minst -128 till 127.

Standardtal: int

Mängden minne som en singel inttar beror på hårdvaran. Du kan dock förvänta dig att en intstorlek är minst 16 bitar. Det betyder att den kan lagra värden från -32 768 till 32 767, eller mer beroende på hårdvara.

Liksom alla dessa andra datatyper finns det en unsignedvariant som kan användas. Det unsigned intkan vara positivt och noll men inte negativt, så det kan lagra värden från 0 till 65 535 eller mer beroende på hårdvara.

Korta heltal: short

Detta brukar inte användas ofta, men det är bra att veta att det finns. Liksom int kan den lagra -32768 till 32767. Till skillnad från int är detta dock omfattningen av dess förmåga. Var som helst du kan använda shortkan du använda int.

Längre heltal: long

De longdatatyp lagrar heltal gillar int, men ger ett bredare spektrum av värden på bekostnad av att ta mer minne. Lång lagrar minst 32 bitar, vilket ger ett intervall av -2,147,483,648 till 2,147,483,647. Alternativt kan du använda det unsigned longi intervallet 0 till 4 294 967 295.

Ännu längre heltal: long long

Den long longdatatyp är overkill för nästan varje applikation, men C låter dig använda det ändå. Den kan lagra åtminstone −9 223 372 036 854 775 807 till 9 223 372 036 854 775 807. Alternativt kan du få ännu mer överkill med unsigned long long, vilket ger dig minst 0 till 18,446,744,073,709,551,615.

Flytpunktens datatyper

Grundläggande flytnummer: float

float tar minst 32 bitar att lagra, men ger oss 6 decimaler från 1.2E-38 till 3.4E + 38.

Dubbel: double

doubletar dubbelt minne av float (så minst 64 bitar). I gengäld kan dubbelt ge 15 decimaler från 2.3E-308 till 1.7E + 308.

Få ett bredare utbud av dubbel: long double

long doubletar minst 80 bitar. Som ett resultat kan vi få 19 decimaler från 3.4E-4932 till 1.1E + 4932.

Välj rätt datatyp

C gör valet av datatyp och gör oss mycket specifika och avsiktliga för hur vi gör detta. Detta ger dig mycket makt över din kod, men det är viktigt att välja rätt.

I allmänhet bör du välja minimum för din uppgift. Om du vet att du kommer att räkna från heltal 1 till 10 behöver du inte en lång och du behöver inte en dubbel. Om du vet att du aldrig kommer att ha negativa värden, titta på unsignedvarianterna av datatyperna. Genom att tillhandahålla denna funktion i stället för att göra det automatiskt kan C producera mycket lätt och effektiv kod. Det är dock upp till dig som programmerare att förstå förmågorna och begränsningarna och välja därefter.

Vi kan använda storleken () för att kontrollera storleken på en variabel. Se följande C-program för användning av de olika datatyperna:

#include  int main() { int a = 1; char b ='G'; double c = 3.14; printf("Hello World!\n"); //printing the variables defined above along with their sizes printf("Hello! I am a character. My value is %c and " "my size is %lu byte.\n", b,sizeof(char)); //can use sizeof(b) above as well printf("Hello! I am an integer. My value is %d and " "my size is %lu bytes.\n", a,sizeof(int)); //can use sizeof(a) above as well printf("Hello! I am a double floating point variable." " My value is %lf and my size is %lu bytes.\n",c,sizeof(double)); //can use sizeof(c) above as well printf("Bye! See you soon. :)\n"); return 0; }

Produktion:

Hello World!Hello! I am a character. My value is G and my size is 1 byte. Hello! I am an integer. My value is 1 and my size is 4 bytes. Hello! I am a double floating point variable. My value is 3.140000 and my size is 8 bytes. Bye! See you soon. :)

Void-typen

Tomrumstypen anger att inget värde är tillgängligt. Den används i tre typer av situationer:

1. Funktionen återgår som ogiltig

Det finns olika funktioner i C som inte returnerar något värde eller så kan du säga att de returnerar ogiltiga. En funktion utan returvärde har returtypen ogiltig. Till exempel,void exit (int status);

2. Funktionsargument som ogiltiga

Det finns olika funktioner i C som inte accepterar någon parameter. En funktion utan parameter kan acceptera ett tomrum. Till exempel,int rand(void);

3. Pekare att ogiltiga

En pekare av typen void * representerar ett objekts adress men inte dess typ. Till exempel void *malloc( size_t size);returnerar en minnesallokeringsfunktion en pekare till tomrum som kan kastas till vilken datatyp som helst.