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