Datové typy - Michal Heczko
Download
Report
Transcript Datové typy - Michal Heczko
Verze 2009.01
6 Datové typy
A1PRG - Programování – Seminář
Ing. Michal Heczko [email protected]
Agenda
Co je to „Datový typ“
Celočíselné datové typy
Racionální datové typy
Prázdný typ (void)
Typ definovaný uživatelem (typedef)
Výčtový typ (enum)
Struktury
Datové typy
Pro uchovávání uživatelských hodnot, výsledků
výpočtů a dalších hodnot používáme proměnné.
Pro každou proměnnou je nutné definovat datový
typ:
Definuje
jaká hodnota bude uložena v dané proměnné
Definuje velikost paměti, která je proměnné vyhrazena.
Celočíselné datové typy
Rozdělení
Znaménkové
Kladná
(klíčové slovo signed)
a záporná čísla
Neznaménkové
Pouze
(klíčové slovo unsigned)
kladná čísla a 0
Celočíselné datové typy
Způsob uložení neznaménkových čísel v paměti:
bit
15 14 13 12 11 10
9
8
7
6
5
4
3
2
1
0
hodnota
Př. Uložení čísla 131
bit
15 14 13 12 11 10
9
8
7
6
5
4
3
2
1
0
hodnota
0
0
0
1
0
0
0
0
0
1
1
0
0
0
0
0
Celočíselné datové typy
Způsob uložení znaménkových čísel v paměti
bit
Z
14 13 12 11 10
9
8
7
6
5
4
3
2
1
0
hodnota
Př. Uložení čísla 131
bit
Z
14 13 12 11 10
9
8
7
6
5
4
3
2
1
0
hodnota
0
0
0
0
1
0
0
0
0
0
1
1
0
0
0
0
Př. Uložení čísla -131
bit
Z
14 13 12 11 10
9
8
7
6
5
4
3
2
1
0
hodnota
1
0
0
0
1
0
0
0
0
0
1
1
0
0
0
0
Celočíselné datové typy
Název typu
Popis
Vel. [b]
Dolní mez
Horní mez
signed int
Celé číslo se
znaménkem
32
-2 147 483 648
2 147 483 647
signed short int
Krátké celé číslo se
znaménkem
16
- 32 768
32 767
signed long int
Dlouhé celé číslo se
znaménkem
32
-2 147 483 648
2 147 483 647
64
-9 223 372 036 854 775 808
9 223 372 036 854 775 807
8
-128
127
signed long long int Velmi dlouhé celé
číslo se
znaménkem
signed char
Znak se
znaménkem
Pozn.: Datový typ long long int zavádí až norma C99
Celočíselné datové typy
Název typu
Popis
Vel. [b]
Dolní mez
Horní mez
unsigned int
Celé číslo bez
znaménka
32
0
4 294 967 295
unsigned short int
Krátké celé číslo
bez znaménka
16
0
65 536
unsigned long int
Dlouhé celé číslo
bez znaménka
32
0
4 294 967 295
unsigned long long
int
Velmi dlouhé celé
číslo bez
znaménka
64
0
18 446 744 073 709 551 616
unsigned char
Znak bez
znaménka
8
0
255
Pozn.: Datový typ long long int zavádí až norma C99
Celočíselné datové typy
Klíčové slovo unsigned značí použití čísla bez
znaménka, signed se znaménkem. Pokud není
uvedeno, je číslo definované jako číslo se
znaménkem.
Velikosti v bitech a rozsahy jsou pouze orientační. U
některých překladačů se mohou tyto hodnoty lišit.
Celočíselné datové typy
Datový typ long long:
Specifikován
v normě C99
Pro vstup a výstup na terminál – %LLd (nebo %lld):
long long x;
scanf(“%LLd”,&x);
printf (“%LLd”,x);
Celočíselné datové typy
Racionální datové typy
Název typu
Popis
Vel. [b]
Dolní mez
Horní mez
float
Reálné číslo s jednoduchou
přesností
32
3.4e-38
3.4e38
double
Reálné číslo s dvojitou
přesností
64
1.7e-308
1.7e308
long double
Reálné číslo se zvýšenou
přesností
80
3.4e-493
1.1e493
Racionální datové typy
Někdy označovány i názvem „Reálné datové typy“,
ten však není zcela přesný.
Velikosti v bitech a rozsahy jsou pouze orientační. U
některých překladačů se mohou tyto hodnoty lišit.
Racionální datové typy
V paměti uloženy v souladu s normou IEEE 754.
Float (racionální číslo v jednoduché přesnosti):
Bit
Význam
Nejvyšší
31
30 29 … 24 23
22 21 … 1 0
Znaménko
Exponent (8 bitů)
Mantisa (23 bitů)
bit – znaménko (0 = kladné; 1 = záporné
číslo)
Exponent – 8 bitů – exponent (pro 2e) posunutý o
hodnotu 127 (tak, aby mohl být v rozsahu od -126 do
127).
Mantisa – 23 bitů – od nejvyššího bitu (2-1, 2-2,
2-3,
… 2-22. 2-23)
Racionální datové typy
Double (racionální číslo s dvojitou přesnosti):
Bit
Význam
Nejvyšší
63
62 61 … 53 52
51 50 … 1 0
Znaménko
Exponent (11 bitů)
Mantisa (52 bitů)
bit – znaménko (0 = kladné; 1 = záporné
číslo)
Exponent – 11 bitů – exponent (pro 2e) posunutý o
hodnotu 1023 (tak, aby mohl být v rozsahu od
-1022 do 1023).
Mantisa – 52 bitů – od nejvyššího bitu (2-1, 2-2,
2-3,
… 2-52. 2-53)
Prázdný typ
Klíčové slovo void
Nenabývá žádných hodnot
Použití:
Pokud
funkce nemá žádné vstupní parametry:
int soucet(void)
{
int a, b;
scanf("%d %d",&a,&b);
return (a+b);
}
Prázdný typ
Pokud
funkce nemá žádnou návratovou hodnotu:
void pozdrav(void)
{
printf(„AHOJ!\n");
}
Typ definovaný uživatelem
Klíčové slovo typedef
Umožňuje vytvářet vlastní datové typy – vytvoří
nové jméno pro již existující datový typ.
Př.
typedef unsigned int delka;
delka a, b;
a = 5;
Výčtový typ
Klíčové slovo enum
Použití v případě, že existuje předem definovaná
konečná množina hodnot, kterých může údaj
nabývat.
Při definici výčtového typu je nutné uvést všechny
hodnoty.
Výčtový typ
Obecná syntaxe:
typedef enum {HODNOTA1, HODNOTA2, …
, HODNOTAN} JMENO;
Příklad:
typedef enum {PONDELI, UTERY,
STREDA, CTVRTEK, PATEK, SOBOTA,
NEDELE} DNY;
Výčtový typ
Použití:
typedef enum {PONDELI, UTERY,
STREDA, CTVRTEK, PATEK, SOBOTA,
NEDELE} DNY;
DNY d1;
d1 = UTERY;
if (d1 == UTERY) printf("Dnes je
utery!");
Celočíselné datové typy
Struktury
Struktura
Skupina
proměnných, které mohou být různého
datového typu. Tyto proměnné jsou seskupeny pod
jeden identifikátor.
Příklad použití:
Definice
Bod tvoří 2 souřadnice – x, y
Údaje
bodu v rovině.
o zaměstnanci
Každý zaměstnanec je popsán množinou atributů (jméno, adresa,
rodné číslo, …)
Struktury
Definice struktury:
struct <nazev> {
<promenna1>;
<promenna2>;
…;
<promennaN>;
};
Příklad:
struct bod{
int x;
int y;
};
Struktury
Inicializace struktury:
struct <nazevstruktury>
<identifikator> = { <hodnota1>,
<hodnota2>, …, <hodnotaN>};
Příklad:
struct bod A = {3, 2};
Struktury
Přístup k jednotlivým prvkům struktur:
<nazevstruktury>.<promenna> =
<hodnota>;
Příklad:
struct bod A = { 3, 2};
A.x = 5;
A.y = 6;
Definice struktury pomocí typedef
Druhá možnost
definice struktury:
typedef struct {
int x;
int y;
} bod;
Umožní definovat
proměnnou bez
klíčového slova struct:
bod A;
Nebo s inicializací:
bod A = {0,0};
Celočíselné datové typy
A1PRG-s
06. Datové typy
Děkuji za pozornost
Ing. Michal Heczko
[email protected]
218/U3
Prezentace k dispozici na http://vyuka.fai.utb.cz