Adattípusok C-ben - egész szám, lebegőpont és érvényesség magyarázata

Adattípusok C-ben

Az adatok C-ben történő tárolásának többféle módja van, és mindegyikük egyedi. Azok a típusú adatok, amelyeket az információ tárolhat, az úgynevezett adattípusok. A C sokkal kevésbé elnéző az adattípusokkal szemben, mint más nyelvek. Ennek eredményeként fontos megbizonyosodni arról, hogy megérti a meglévő adattípusokat, képességeiket és korlátaikat.

A C adattípusainak egyik furcsa oka, hogy teljes mértékben attól a hardvertől függenek, amelyen a kódot futtatja. Az intÖn laptopja kisebb lesz, mint integy szuperszámítógépen, ezért fontos, hogy ismerje a hardver korlátait. Ezért is definiálják az adattípusokat minimálisnak - egy intérték, amint megtudhatja, minimum -32767 és 32767 között van: bizonyos gépeken még több értéket képes tárolni, amit ez.

Két kategóriára oszthatjuk fel ezt: egész számokra és lebegőpontos számokra. Az egész szám egész szám. Pozitív, negatív vagy nulla lehet. Az olyan számok, mint a -321, 497, 19345 és -976812, teljesen érvényesek egész számok, de a 4.5 nem azért, mert a 4.5 nem egész szám.

A lebegőpontos számok tizedesjegyű számok. Az egész számokhoz hasonlóan a -321, 497, 19345 és -976812 is érvényesek, de most már 4,5, 0,0004, -324,984 és egyéb nem egész számok is érvényesek.

A C lehetővé teszi számunkra, hogy adattípusainkkal többféle lehetőség közül választhassunk, mivel mindegyiket különböző módon tárolják a számítógépen. Ennek eredményeként fontos, hogy tisztában legyünk az egyes adattípusok képességeivel és korlátaival a legmegfelelőbb kiválasztásához.

Egész adatok típusai

Karakterek: char

charbetűket, írásjeleket és szóközöket tartalmaz. A számítógépen a karakterek számként vannak tárolva, így chara karaktereket reprezentáló egész értékeket tartalmazzák. A tényleges fordítást az ASCII szabvány írja le. Itt van egy praktikus asztal ennek felkutatásához.

A tényleges méret, hasonlóan a C összes többi adattípusához, attól a hardvertől függ, amelyen dolgozik. Minimálisan legalább 8 bit, tehát legalább 0 és 127 között lesz. Alternatív megoldásként használhatja signed charlegalább -128 és 127 közötti értékeket is.

Normál egész számok: int

Az egyetlen memória mennyisége inta hardvertől függ. Arra azonban számíthat, inthogy legalább 16 bit méretű legyen. Ez azt jelenti, hogy a hardvertől függően -32 768 és 32 767 vagy ennél nagyobb értékeket képes tárolni.

Az összes többi adattípushoz hasonlóan létezik egy unsignedváltozat is. A unsigned intpozitív és nulla lehet, de nem negatív, így 0 és 65 535 közötti értékeket, vagy a hardvertől függően többet is tárolhat.

Rövid egész számok: short

Ez nem szokott gyakran, de jó tudni, hogy létezik. Az int-hez hasonlóan ez is képes -32768 és 32767 közötti tárolásra. Az int-től eltérően azonban ez a képességének mértéke. Bárhol használhatja short, használhatja int.

Hosszabb egész számok: long

Az longadattípus a like egész számokat tárolja int, de szélesebb értéktartományt ad, több memória igénybevételének árán. A hosszú tárol legalább 32 bitet, így a tartomány 2 147 483 648 és 2 147 483 647. Alternatív megoldásként használjon unsigned long0 és 4 294 967 295 közötti tartományokat.

Még hosszabb egész számok: long long

Az long longadattípus túl sok minden alkalmazásnál, de a C így is lehetővé teszi a használatát. Legalább −9,223,372,036,854,775,807–9,223,372,036,854,775,807 tárolására képes. Alternatív megoldásként szerezzen még nagyobb túlterhelést unsigned long long, ami legalább 0-tól 18,446,744,073,709,551,615-ig ad.

Lebegőpontos adattípusok

Alapvető lebegőpontos számok: float

float Legalább 32 bitet kell tárolni, de 6 tizedesjegyet adunk az 1.2E-38-tól a 3.4E + 38-ig.

Páros: double

doubleaz úszó memória dupláját veszi fel (tehát legalább 64 bit). Cserébe a kettős 15 tizedesjegyet adhat meg a 2.3E-308 és 1.7E + 308 között.

A párosok szélesebb skálájának megszerzése: long double

long doublelegalább 80 bitet vesz igénybe. Ennek eredményeként 19 tizedesjegyet kaphatunk a 3.4E-4932-től az 1.1E + 4932-ig.

A megfelelő adattípus kiválasztása

A C kiválasztja az adattípust, és nagyon konkrét és szándékossá tesz minket ennek módjával kapcsolatban. Ez nagy hatalmat ad a kód felett, de fontos a megfelelő kiválasztása.

Általában ki kell választania a feladat minimumát. Ha tudod, hogy 1-től 10-ig számolsz, akkor nem kell hosszú és nincs szükség duplára. Ha tudja, hogy soha nem lesznek negatív értékei, vizsgálja unsignedmeg az adattípusok változatainak használatát . Ennek a funkciónak az automatikus biztosítása helyett a C nagyon könnyű és hatékony kódot képes előállítani. A programozón múlik azonban, hogy megértse-e a képességeket és a korlátozásokat, és ennek megfelelően válasszon.

Használhatjuk a sizeof () operátort egy változó méretének ellenőrzésére. A különféle adattípusok használatát lásd az alábbi C programban:

#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; }

Kimenet:

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. :)

Az Üresség típus

A void típus megadja, hogy nem érhető el érték. Háromféle helyzetben használják:

1. A függvény érvénytelenül tér vissza

Különböző függvények vannak a C-ben, amelyek nem adnak vissza értéket, vagy mondhatjuk, hogy érvénytelenek. A visszatérési érték nélküli függvény visszatérési típusa érvénytelen. Például,void exit (int status);

2. A funkció argumentumai érvénytelenek

Különböző funkciók vannak a C-ben, amelyek nem fogadnak el egyetlen paramétert sem. Paraméter nélküli funkció elfogadhat egy ürességet. Például,int rand(void);

3. Az érvénytelenítésre mutató mutatók

A void * típusú mutató az objektum címét jelöli, a típusát azonban nem. Például egy memória-allokációs függvény void *malloc( size_t size);visszaállítja a mutató érvényét, amelyet bármilyen adattípusra át lehet önteni.