Andmetüübid C-s - täisarv, ujukombe ja tühi selgitus

Andmetüübid C-s

Andmete salvestamiseks C-s on mitu erinevat viisi ja need kõik on üksteisest ainulaadsed. Andmetüüpe, mida teavet saab salvestada, nimetatakse andmetüüpideks. C on andmetüüpide suhtes palju vähem andestav kui muudes keeltes. Seetõttu on oluline veenduda, et mõistate olemasolevaid andmetüüpe, nende võimeid ja piiranguid.

Üks C-tüüpi andmetüüp on see, et need sõltuvad täielikult riistvarast, millel oma koodi käitate. intSülearvuti on väiksem kui intsuperarvutil, nii teades piirangud riistvara te töötate on oluline. Sellepärast on andmetüübid määratletud minimaalsetena - intväärtus, nagu saate teada, on minimaalselt -32767 kuni 32767: teatud masinates suudab see salvestada veelgi rohkem väärtusi.

Selle saab jagada kahte kategooriasse: täisarvud ja ujukomaarvud. Täisarvud on täisarvud. Need võivad olla positiivsed, negatiivsed või nullid. Numbrid nagu -321, 497, 19345 ja -976812 on kõik täiesti kehtivad täisarvud, kuid 4,5 mitte sellepärast, et 4.5 pole täisarv.

Ujukoma numbrid on kümnendkohaga arvud. Nagu täisarvud, kehtivad -321, 497, 19345 ja -976812 kõik, kuid nüüd kehtivad ka 4,5, 0,0004, -324,984 ja muud mitte-täisarvud.

C võimaldab meil valida oma andmetüüpidega mitme erineva võimaluse vahel, kuna need kõik on arvutis erineval viisil salvestatud. Sellest tulenevalt on kõige sobivama valimiseks oluline olla teadlik iga andmetüübi võimetest ja piirangutest.

Andmete tüübid täisarvuna

Tähemärgid: char

charsisaldab märke - näiteks tähti, kirjavahemärke ja tühikuid. Arvutis salvestatakse tähemärgid numbritena, nii et see charsisaldab täisarvu, mis tähistab märke. Tegelikku tõlget kirjeldab ASCII standard. Siin on mugav tabel selle otsimiseks.

Tegelik suurus, nagu kõik muud C-tüüpi andmetüübid, sõltub riistvarast, millega töötate. Minimaalselt on see vähemalt 8 bitti, nii et teil on vähemalt 0 kuni 127. Teise võimalusena võite kasutada signed charka vähemalt -128 kuni 127 saamiseks.

Standardarv: int

Üksiku mälumaht intsõltub riistvarast. Kuid võite eeldada, et intselle suurus on vähemalt 16 bitti. See tähendab, et see võib salvestada väärtusi vahemikus -32 768 kuni 32 767 või rohkem, sõltuvalt riistvarast.

Nagu kõiki neid muid andmetüüpe, on ka siin üks unsignedvariant, mida saab kasutada. See unsigned intvõib olla positiivne ja null, kuid mitte negatiivne, nii et see võib salvestada väärtusi vahemikus 0 kuni 65 535 või rohkem, sõltuvalt riistvarast.

Lühikesed täisarvud: short

Seda ei kasutata sageli, kuid on hea teada, et see on olemas. Nagu int, saab see salvestada -32768 kuni 32767. Erinevalt int-st on see siiski tema võimete ulatus. Kõikjal, mida saate kasutada short, võite kasutada int.

Pikemad täisarvud: long

longAndmete tüüp kauplustes täisarvud meeldib int, kuid annab laiemat väärtuste arvelt võttes rohkem mälu. Pikad salvestavad vähemalt 32 bitti, andes sellele vahemiku -2 147 483 648 kuni 2 147 483 647. Teise võimalusena kasutage unsigned longvahemikku 0 kuni 4 294 967 295.

Isegi pikemad täisarvud: long long

long longAndmete tüüp on overkill peaaegu iga rakendus, kuid C laseb seda kasutada niikuinii. See suudab salvestada vähemalt −9 223 372 036 854 775 807 kuni 9 223 372 036 854 775 807. Teise võimalusena võite end veelgi rohkem ületada unsigned long long, mis annab teile vähemalt 0 kuni 18 446 744 073 709 551 615.

Ujuvarvu andmetüübid

Põhilised ujukomaarvud float

float võtab salvestamiseks vähemalt 32 bitti, kuid annab meile kuus kohta pärast koma 1,2E-38 kuni 3.4E + 38.

Paarismäng: double

doublevõtab ujukimälu topelt (seega vähemalt 64 bitti). Vastutasuks võib topelt anda 15 kümnendkoha täpsusega vahemikus 2,3E-308 kuni 1,7E + 308.

Laiema topeltvaliku saamine: long double

long doublevõtab vähemalt 80 bitti. Selle tulemusena saame 19 komakohta alates 3.4E-4932 kuni 1.1E + 4932.

Õige andmetüübi valimine

C makes pick the data type, and makes us be very specific and intentional about the way that we do this. This gives you a lot of power over your code, but it’s important to pick the right one.

In general, you should pick the minimum for your task. If you know you’ll be counting from integer 1 to 10, you don’t need a long and you don’t need a double. If you know that you will never have negative values, look into using the unsigned variants of the data types. By providing this functionality rather than doing it automatically, C is able to produce very light and efficient code. However, it’s up to you as the programmer to understand the abilities and limitations, and choose accordingly.

We can use the sizeof() operator to check the size of a variable. See the following C program for the usage of the various data types:

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

Output:

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

The Void type

Tühjuse tüüp määrab, et väärtus pole saadaval. Seda kasutatakse kolme tüüpi olukordades:

1. Funktsioon tagastatakse tühisena

C-s on mitmesuguseid funktsioone, mis ei anna väärtust või võite öelda, et need tagastatakse tühistena. Tagasiväärtuseta funktsiooni tagasitüübi tüüp on tühine. Näiteks,void exit (int status);

2. Funktsiooni argumendid on tühised

C-s on erinevaid funktsioone, mis ei aktsepteeri ühtegi parameetrit. Funktsioon, millel pole parameetreid, võib tunnistada tühise. Näiteks,int rand(void);

3. Kehtetuks osutamise näpunäited

Vorm * tüübiga kursor tähistab objekti aadressi, kuid mitte selle tüüpi. Näiteks void *malloc( size_t size);tagastab mälu eraldamise funktsioon osuti tühiseks, mille saab valada mis tahes tüüpi andmetele.