Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

4. diel - Typový systém druhýkrát - Dátové typy v C ++

V predchádzajúcom cvičení, Riešené úlohy k 1.-3. lekciu C ++, sme si precvičili získané skúsenosti z predchádzajúcich lekcií.

V minulej lekcii, Riešené úlohy k 1.-3. lekciu C ++ , sme si ukázali základné dátové typy, boli to int, string a float. Teraz sa na dátové typy pozrieme viac zblízka a vysvetlíme si, kedy aký použiť. Dnešné C ++ tutoriál bude veľa teoretický, ale o to viac bude praktický ten budúci. Na konci si vytvoríme pár jednoduchých ukážok.

C ++ rozoznáva mnoho rôznych dátových typov. Tým základným sa hovorí fundamentálne a jedná sa najmä o čísla.

Celočíselné dátové typy

Pozrime sa teraz na tabuľku všetkých vstavaných celočíselných dátových typov v C ++, všimnite si typu int, ktorý už poznáme z minulosti.

dátový typ rozsah veľkosť
signed char -128 až 127 8 bitov
unsigned char 0 až 255 8 bitov
short -32 768 až 32 767 16 bitov
unsigned short 0 až 65 535 16 bitov
int -2 147 483 648 až 2 147 483 647 32 bitov
unsigned int 0 až 4 294 967 295 32 bitov
long int veľkosť i rozsah sú závislé na prekladači
unsigned long int veľkosť i rozsah sú závislé na prekladači
long long int veľkosť i rozsah sú závislé na prekladači
unsigned long long int veľkosť i rozsah sú závislé na prekladači
Pozn .: rozsahy a veľkosti typov sú závislé na prekladači a architektúre systému, ja tu uvádzam hodnoty pre Visual Studio a 64 bitovú architektúru.

Asi vás napadá otázka, prečo máme toľko možných typov pre uloženie čísla. Odpoveď je prostá, záleží na jeho veľkosti. Čím väčšie číslo, tým viac spotrebuje pamäte. Pre vek užívateľov teda zvolíme unsigned char, pretože sa určite nedožije viac, než 255 rokov. Predstavte si databázu milióna užívateľov nejakého systému, keď zvolíme miesto unsigned char, int, bude zaberať 4x viac miesta. Naopak keď budeme mať funkciu na výpočet faktoriálu, ťažko nám bude stačiť rozsah int ua použijeme long long.

Všimnite si, že niektoré typy začínajú na unsigned. Sú takmer rovnaké, ako ich dvojníci bez unsigned, len neumožňujú záporné hodnoty a tým pádom na kladnú časť môžu uložiť 2x vyššiu hodnotu. Opakom je signed, ktorý ale prekladač dopĺňa automaticky (výnimkou je signed char, pretože samotné char má iný význam).

Nad výberom dátového typu nemusíte moc premýšľať a väčšinou sa používa jednoducho int. Typ riešte len v prípade, keď sú premenné v nejakom poli (všeobecne kolekciu) a je ich teda viac. Potom sa ešte len oplatí zaoberať sa pamäťovými nárokmi. Tabuľku sem dávam skôr pre úplnosť. Medzi typy samozrejme funguje už spomínaná implicitné konverzie, teda môžeme priamo priradiť int do premennej typu long a podobne, bez toho aby sme niečo konvertovali.

Desatinné čísla

U desatinných čísel je situácia trochu jednoduchšie, máme na výber iba tri dátové typy. Samozrejme sa líšia opäť v rozsahu hodnoty, ďalej však ešte v presnosti (vlastne počtu des. Miest). Typ double má už podľa názvu dvojnásobnú presnosť oproti float.

dátový typ rozsah presnosť
float + -3.4 * 10 -38 až + -3.4 * 10 38 7 číslic
double + -1.7 * 10 -308 až + -1.7 * 10 308 15 číslic
long double + -1.7 * 10 -308 až + -1.7 * 10 308 15 číslic
Pozn: typ long double je niekde rovnaký ako double, alebo môže byť väčšia, vo VS je rovnaký.

Pozor, vzhľadom k tomu, že desatinné čísla sú v počítači uložené v dvojkovej sústave, dochádza k určitej strate presnosti. Odchýlka je síce takmer zanedbateľná, však keď budete programovať napr. Finančný systém, môžu sa objaviť problémy.

Ako desatinný separátor používame v zdrojovom kóde vždy bodku, nehľadiac na to, aké máme vo Windows regionálne nastavenia. Ak kdekoľvek v zdrojovom kóde priamo zadáme desatinné číslo, berie sa ako double. Hodnoty float je nutné zadávať sa suffixom f:

double d = 3.14;
float f = 3.14f;

Ďalšie vstavané dátové typy

Pozrime sa na ďalšie dátové typy, ktoré nám C ++ ponúka:

dátový typ rozsah Veľkosť / Presnosť význam
char U + 00 až U + ff (0 až 255 alebo -128 až 127) 8 bitov znak
wchar_t U + 0000 až U + ffff (0 až 65 535) 16 bitov "Široký" znak
bool true alebo false (1 alebo 0) 8 bitov logická hodnota
Char

Typ char (character) nám reprezentuje jeden znak. Na rozdiel od typu string, ktorý reprezentoval celý reťazec hodnôt typu char, píšeme znaky v C ++ do jednoduchých apostrofov:

char c = 'A';

Typ char patrí v podstate do celočíselných premenných (obsahuje číselný kód znaku), ale prišlo mi logickejšie uviesť ho tu.

wchar_t je podobný, len umožňuje uložiť znak z viac znakových sád, napr. môže obsahovať znak diakritické.

Bool

Typ bool nadobúda dvoch hodnôt: true (pravda) a false (nepravda). Budeme ho používať najmä vtedy, až sa dostaneme k podmienkam. Do premennej typu bool možno uložiť ako priamo hodnotu true / false, tak aj výsledok logického výrazu alebo celé číslo (0 ako false a čokoľvek iné ako true).

Skúsme si jednoduchý príklad:

bool b = false;
bool vyraz = (15 > 5);
cout << b << endl;
cout << vyraz << endl;
cin.get();

Výstup programu:

Konzolová aplikácia
0
1

Výrazy píšeme do zátvoriek. Vidíme, že výraz nadobúda hodnoty true (pravda), pretože 15 je naozaj väčší ako 5. Od výrazov je to už len krok k podmienkam.

Je toho ešte veľa k vysvetľovaniu a existujú ešte ďalšie dátové typy. Aby sme však stále nepreberala len teóriu, ukážeme si v budúcej lekcii, Podmienky (vetvenia) v C ++ , sľúbené podmienky a vytvoríme ďalšie, zaujímavejšie aplikácie :)


 

Predchádzajúci článok
Riešené úlohy k 1.-3. lekciu C ++
Všetky články v sekcii
Základné konštrukcie jazyka C ++
Preskočiť článok
(neodporúčame)
Podmienky (vetvenia) v C ++
Článok pre vás napísal Zdeněk Pavlátka
Avatar
Užívateľské hodnotenie:
5 hlasov
Autor se věnuje spoustě zajímavých věcí ze světa informatiky a grafiky
Aktivity