NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.

Lekce 4 - Typový systém podruhé - Datové typy v C++

V předešlém cvičení, Řešené úlohy k 1.-3. lekci C++, jsme si procvičili nabyté zkušenosti z předchozích lekcí.

Nyní se na datové typy podíváme více zblízka a vysvětlíme si, kdy jaký použít. Dnešní C++ tutoriál bude hodně teoretický, ale o to více bude praktický ten příští. Na konci si vytvoříme pár jednoduchých ukázek.

C++ rozeznává mnoho různých datových typů. Těm základním se říká fundamentální a jedná se zejména o čísla.

Celočíselné datové typy

Podívejme se nyní na tabulku všech vestavěných celočíselných datových typů v C++, všimněte si typu int, který již známe z minula.

Datový typ Rozsah Velikost
signed char -128 až 127 8 bitů
unsigned char 0 až 255 8 bitů
short –32 768 až 32 767 16 bitů
unsigned short 0 až 65 535 16 bitů
int –2 147 483 648 až 2 147 483 647 32 bitů
unsigned int 0 až 4 294 967 295 32 bitů
long int velikost i rozsah jsou závislé na překladači
unsigned long int velikost i rozsah jsou závislé na překladači
long long int velikost i rozsah jsou závislé na překladači
unsigned long long int velikost i rozsah jsou závislé na překladači

Pozn.: rozsahy a velikosti typů jsou závislé na překladači a architektuře systému, já tu uvádím hodnoty pro Visual Studio a 64 bitovou architekturu.

Asi vás napadá otázka, proč máme tolik možných typů pro uložení čísla. Odpověď je prostá, záleží na jeho velikosti. Čím větší číslo, tím více spotřebuje paměti. Pro věk uživatele tedy zvolíme unsigned char, protože se jistě nedožije více, než 255 let. Představte si databázi milionu uživatelů nějakého systému, když zvolíme místo unsigned char, int, bude zabírat 4x více místa. Naopak když budeme mít funkci k výpočtu faktoriálu, stěží nám bude stačit rozsah intu a použijeme long long.

Všimněte si, že některé typy začínají na unsigned. Jsou téměř stejné, jako jejich dvojníci bez unsigned, jen neumožňují záporné hodnoty a tím pádem na kladnou část mohou uložit 2x vyšší hodnotu. Opakem je signed, který ale překladač doplňuje automaticky (výjimkou je signed char, protože samotné char má jiný význam).

Nad výběrem datového typu nemusíte moc přemýšlet a většinou se používá jednoduše int. Typ řešte pouze v případě, když jsou proměnné v nějakém poli (obecně kolekci) a je jich tedy více. Potom se teprve vyplatí zabývat se paměťovými nároky. Tabulku sem dávám spíše pro úplnost. Mezi typy samozřejmě funguje již zmíněná implicitní konverze, tedy můžeme přímo přiřadit int do proměnné typu long a podobně, aniž bychom něco konvertovali.

Desetinná čísla

U desetinných čísel je situace poněkud jednodušší, máme na výběr pouze tři datové typy. Samozřejmě se liší opět v rozsahu hodnoty, dále však ještě v přesnosti (vlastně počtu des. míst). Typ double má již dle názvu dvojnásobnou přesnost oproti float.

Datový typ Rozsah Přesnost
float +-3.4 * 10−38 až +-3.4 * 1038 7 číslic
double +-1.7 * 10−308 až +-1.7 * 10308 15 číslic
long double +-1.7 * 10−308 až +-1.7 * 10308 15 číslic

Pozn: typ long double je někde stejný jako double, nebo může být větší, ve VS je stejný.

Pozor, vzhledem k tomu, že desetinná čísla jsou v počítači uložena ve dvojkové soustavě, dochází k určité ztrátě přesnosti. Odchylka je sice téměř zanedbatelná, nicméně když budete programovat např. finanční systém, mohou se objevit problémy.

Jako desetinný separátor používáme ve zdrojovém kódu vždy tečku, nehledě na to, jaké máme ve Windows regionální nastavení. Pokud kdekoli ve zdrojovém kódu přímo zadáme desetinné číslo, bere se jako double. Hodnoty float je nutné zadávat se suffixem f:

double d = 3.14;
float f = 3.14f;

Další vestavěné datové typy

Podívejme se na další datové typy, které nám C++ nabízí:

Datový typ Rozsah Velikost/Přesnost Význam
char U+00 až U+ff (0 až 255 nebo -128 až 127) 8 bitů znak
wchar_t U+0000 až U+ffff (0 až 65 535) 16 bitů "široký" znak
bool true nebo false (1 nebo 0) 8 bitů logická hodnota

char

Typ char (character) nám reprezentuje jeden znak. Na rozdíl od typu string, který reprezentoval celý řetězec hodnot typu char, píšeme znaky v C++ do jednoduchých apostrofů:

char c = 'A';

Typ char patří v podstatě do celočíselných proměnných (obsahuje číselný kód znaku), ale přišlo mi logičtější uvést ho zde.

wchar_t je podobný, jen umožňuje uložit znak z více znakových sad, např. může obsahovat znak diakritický.

bool

Typ bool nabývá dvou hodnot: true (pravda) a false (nepravda). Budeme ho používat zejména tehdy, až se dostaneme k podmínkám. Do proměnné typu bool lze uložit jak přímo hodnotu true/false, tak i výsledek logického výrazu nebo celé číslo (0 jako false a cokoli jiného jako true).

Zkusme si jednoduchý příklad:

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

Výstup programu:

Konzolová aplikace
0
1

Výrazy píšeme do závorek. Vidíme, že výraz nabývá hodnoty true (pravda), protože 15 je opravdu větší než 5. Od výrazů je to již jen krok k podmínkám.

Je toho ještě spoustu k vysvětlování a existují ještě další datové typy.

Aby jsme však stále neprobírali jen teorii, ukážeme si v příští lekci, Podmínky (větvení) v C++, slíbené podmínky a vytvoříme další, zajímavější aplikace :)


 

Předchozí článek
Řešené úlohy k 1.-3. lekci C++
Všechny články v sekci
Základní konstrukce jazyka C++
Přeskočit článek
(nedoporučujeme)
Podmínky (větvení) v C++
Článek pro vás napsal Zdeněk Pavlátka
Avatar
Uživatelské hodnocení:
215 hlasů
Autor se věnuje spoustě zajímavých věcí ze světa informatiky a grafiky
Aktivity