Ako môžeme uložiť nejakú hodnotu v jazyku C pre neskoršie použitie?
Premenné sa používajú preto, aby sme uložili nejakú hodnotu ktorú chceme neskôr použiť, prípadne ak chceme uložiť nejaký výpočet a použiť ho viackrát bez toho, aby sme museli algoritmus výpočtu zakaždým opakovať.
Dátové typy
Ak chceme vytvoriť nejakú premennú v jazyku C, musíme najskôr poznať jej dátový typ. Je to spôsob, ktorý definuje ako je obsah premennej uložený v operačnej pamäti (RAM). Ak chceme napríklad uložiť hodnotu, ktorá reprezentuje pozíciu znaku v ASCII tabuľke, použijeme typ char
. Pre desatinné čísla použijeme float
, a podobne. Je dôležité vyberať správne dátové typy - napríklad, desatinné číslo nie je možné uložiť v pamäti ako celé číslo (s tým, že takéto číslo by sa dalo používať a robilo by to, čo očakávame).
Medzi základné dátové typy patria:
Kľúčové slovo
pre definíciu |
Rozsah (vrátane) | Povoľuje negatívne hodnoty? | Koľko bitov zaberá v pamäti? | Využitie | |
---|---|---|---|---|---|
char
|
-128 až 127 | áno | 8 | Používame ho pre uchovávanie znakových hodnôt, pretože reprezentuje práve jeden znak v ASCII tabuľke (sám o sebe ale nepredstavuje reťazec viacerých znakov!). | |
unsigned char
|
0 až 255 | nie | 8 | Vo veľmi špecifických prípadoch (pozri nižšie). | |
short
|
-32 768 až
32 767 |
áno | 16 | V špecifických prípadoch, ak potrebujeme dodatočnú kontrolu nad využívaním pamäte RAM (napríklad, ak vyvíjame softvér pre prostredie s malým množstvom využiteľnej pamäte)[1]. | |
unsigned short
|
0 až 65 535 | nie | 16 | Vo veľmi špecifických prípadoch (pozri nižšie). | |
int
|
-2 147 483 648 až
2 147 483 647 |
áno | 32 | V prevažnej väčšine prípadov, keď chceme reprezentovať celočíselnú hodnotu (v aritmetických výpočtoch, pre indexy v cykloch a podobne). | |
unsigned int
|
0 až
4 294 967 295 |
nie | 32 | Vo veľmi špecifických prípadoch (pozri nižšie). | |
long long
|
-9 223 372 036 854 775 808 až
9 223 372 036 854 775 807 |
áno | 64 | Ak potrebujeme reprezentovať veľmi veľké čísla, kde je int nedostatočný.
Poznámka: zaberá 64 bitov, na 32-bitových systémoch sa "zlepia" dve 32-bitové adresy dokopy. |
|
unsigned long long
|
0 až
18 446 744 073 709 551 615 |
nie | 64 | Vo veľmi špecifických prípadoch (pozri nižšie).
Poznámka: zaberá 64 bitov, na 32-bitových systémoch sa "zlepia" dve 32-bitové adresy dokopy. |
|
float
|
-3.4 × 1038 až 3.4 × 1038 | áno | 32 | Ak potrebujeme vo všeobecnosti uložiť nejaké desatinné číslo. | |
double
|
-1.7 × 10308 až 1.7 × 10308 | áno | 64 | Ak potrebujeme uložiť desatinné číslo, na ktoré float nepostačuje.
Poznámka: zaberá 64 bitov, na 32-bitových systémoch sa "zlepia" dve 32-bitové adresy dokopy. |
Kedy použiť signed
alebo unsigned
?
Hlavný rozdiel medzi signed
a unsigned
číslami je v tom, že signed
čísla môžu byť negatívne (< 0), ale unsigned
nemôžu. Pomenovanie pochádza (samozrejme) z angličtiny, kde sa znamienko negácie označuje ako "negation sign" - samotné znamienko je "sign", a teda premenné ktoré sú signed
by sa dali preložiť ako "oznamienkované" (so znamienkom).
Umožňujú uloženie čísiel v väčším rozsahom, pretože bit ktorý získame navyše namiesto znamienka sa použije pre zväčšenie rozsahu (keďže môžeme kombinovať jeden bit navyše, a tým pádom uložiť väčšie čísla). Nevýhoda ale je, že počet využitých bitov v pamäti sa neredukuje a vo všeobecnosti iba zamieňame väčší rozsah s možnosťou ukladať negatívne čísla (teda, nemôžme ich použiť s úmyslom znížiť pamäť, ktorú náš program používa). Nie sú taktiež vhodné pre indexy, ako by sa na prvý pohľad mohlo zdať[2].
Sú preto vhodné iba v niekoľkých špecifických prípadoch:
- ak pracujeme s bitmi a bitovými operáciami
- ak sme zúfalí a potrebujeme vyšší rozsah pre uloženie nášho čísla
- ak využívame ich vlastnosti v iných špecifických prípadoch, napríklad v kryptografii, atď...
V skratke, je lepšie o nich moc nepremýšľať pretože v kontexte bežných programovacích problémov nie sú výhodné a benefity ktoré poskytujú sú zatienené ich slabými stránkami.