Toggle menu
Toggle preferences menu
Toggle personal menu
Neprihlásený/á
Your IP address will be publicly visible if you make any edits.
Verzia z 20:05, 31. október 2024, ktorú vytvoril SKevo (diskusia | príspevky)

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ť.

Identifikátory v jazyku C

V jazyku C identifikátory predstavujú akúkoľvek premennú, konštantu, funkciu a jej parametre, typ, selektor, položku štruktúrovaných typov a podobne. Identifikátor je postupnosť písmen anglickej abecedy, arabských číslic a/alebo podčiarkovníka (_).

Identifikátory nemôžu obsahovať medzere alebo iné špeciálne znaky, diakritiku a podobne - prípustné sú iba znaky ASCII kódu. Pre lepšiu čitateľnosť sa používa pre oddelenie viacslovných identifikátorov podľa konvencie podčiarkovník, napr.: toto_je_moja_premenna (ale nikto nikomu neodtrhne hlavu, ak použije camelCase alebo inú konvenciu pre názvy identifikátorov).

Ako identifikátor nie je možné použiť iba jedno z nasledujúcich kľúčových slov a nič iné (jedná sa o vyhradené slová pre kompilátor jazyka C):

auto        enum        short
break       extern      signed
case        float       sizeof
char        for         static
const       goto        struct
continue    if          switch
default     inline      typedef
do          int         union
double      long        unsigned
else        register    void
entry       restrict    volatile
for         return      while

Identifikátory premenných

Identifikátor premennej predstavuje jej názov - ako označíme naše dáta tak aby sme ich vedeli neskôr použiť?

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

Prehľad dátových typov

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.

boolean?

🤔

A kde je boolean?

Premenná typu boolean nie je v jazyku C definovaná. Namiesto toho sa pre reprezentáciu hodnôt pravda a nepravda používajú celočíselné konštanty 0 a 1.

Typ bool si môže definovať používateľ sám alebo zahrnúť hlavičkový súbor <stdbool.h> - ale o tom neskôr. Dovtedy budeme používať nuly a jednotky, tak ako to C od nás očakáva :)