~~NOCACHE~~
~~REVEAL theme=dokuwiki&transition=convex&controls=1&show_progress_bar=1&build_all_lists=1&show_image_borders=0&horizontal_slide_level=2&enlarge_vertical_slide_headers=0&show_slide_details=1&open_in_new_window=1&size=1480x960~~
====== Datové typy ======
===== 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|-231 - 231-1| 32 bitů|
|unsigned long int|0 - 231-1|32 bitů|
((https://www.itnetwork.cz/cplusplus/zaklady/c-plus-plus-tutorial-typovy-system-podruhe-datove-typy-string))
===== Desetinná čísla =====
^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|
* 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.
double d = 3.14;
float f = 3.14;
===== Další vestavěné datové typy =====
|char|U+00 až U+ff (0 až 255 nebo -128 až 127)|8 bitů|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';
==== 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).
#include
int main(void) {
bool b = false;
bool vyraz = (15 > 5);
printf("%d\n", b);
printf("%d\n", vyraz);
return 0;
}
===== Výstupní konverze =====
^typ^význam^
|d, i|Celé číslo se znaménkem (Zde není mezi d a i rozdíl.|
|u|Celé číslo bez znaménka.|
|o|Číslo v osmičkové soustavě.|
|x, X|Číslo v šestnáctkové soustavě. Písmena ABCDEF se budou malá při použití malého x, nebo velká při použití velkého X.|
|f|Racionální číslo (float, double) bez exponentu.|
|e, E|Racionální číslo s exponentem, implicitně 1 pozice před des. tečkou a 6 za ní. Exponent uvozuje malé nebo velké E.|
|g, G|Racionální číslo s exponentem nebo bez něj (podle absolutní hodnoty čísla). Neobsahuje des. tečku, pokud nemá des. část.|
|c|Jeden znak.|
|s|Řetězec.|
((https://www.sallyx.org/sally/c/c07.php))
---->
Co se děje v následující ukázce?
#include
int main(void)
{
char *COPYRIGHT = "(C)";
int ROK = 2003;
printf("%i %u %o %x %X %f %e %G\n", -5, -5, 200, 200, 200, 10.0,
10.0, 10.0);
printf("%s %i\n", COPYRIGHT, ROK);
return 0;
}
/* Výstup:
-5 4294967291 310 c8 C8 10.000000 1.000000e+01 10
(C) 2003
*/
<----
====== Shrnutí ======
---->
/* Zakladni pouziti - cteni ze vstupu
*/
printf ( "Cele cislo:\n" );
scanf ( "%d", &a ); /* pozor, & a */
printf ( "a = %d\n", a );
printf ( "Desetinne cislo (double):\n" );
scanf ( "%lf", &b ); /* pozor, & b, pozor %lf */
printf ( "b = %f\n", b ); /* zde %f, ne lf */
printf ( "Desetinne cislo (float):\n" );
scanf ( "%f", &c ); /* pozor, & c, pozor %f */
printf ( "c = %f\n", c ); /* zde %f */
printf ( "Znak (char), ne whitespace:\n" );
scanf ( "%c", &d ); /* pozor, & d */
printf ( "d = %c\n", d );
/* Proc nelze znak zadat?
*/
printf ( "Retezec, max 19 znaku:\n" );
scanf ( "%s", str ); /* pozor, zde ne & */
printf ( "str = %s\n", str );
<----
---->
/* Dalsi formaty
*/
printf ( "Unsigned int:\n" );
scanf ( "%u", &u );
printf ( "u = %d\n", u );
printf ( "Short int:\n" );
scanf ( "%hd", &s ); /* zde %h */
printf ( "s = %d\n", s ); /* zde %d */
printf ( "Hex: \n" );
scanf ( "%x", &u ); /* cteme hex */
printf ( "u = %u\n", u ); /* zobrazime jako dec, %u = unsigned int */
printf ( "Oct: \n" );
scanf ( "%o", &u ); /* cteme oct */
printf ( "u = %u\n", u ); /* zobrazime jako dec */
<----