~~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 */ <----