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 |
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 |
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 |
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:
{CPP_CONSOLE}
bool b = false;
bool vyraz = (15 > 5);
cout << b << endl;
cout << vyraz << endl;
cin.get();
{/CPP_CONSOLE}
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