datové typy
Post on 01-Feb-2016
94 Views
Preview:
DESCRIPTION
TRANSCRIPT
A1PRG - Programování – Seminář
Ing. Michal Heczko heczko@fai.utb.cz
Datové typy6
Verze 2009.01
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é (klíčové slovo signed) Kladná a záporná čísla
Neznaménkové (klíčové slovo unsigned) Pouze kladná čísla a 0
Celočíselné datové typy
Způsob uložení neznaménkových čísel v paměti:
Př. Uložení čísla 131
bit 15
14 13
12
11 10
9 8 7 6 5 4 3 2 1 0
hodnota
bit 15
14 13
12
11 10
9 8 7 6 5 4 3 2 1 0
hodnota
0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 1
Celočíselné datové typy
Způsob uložení znaménkových čísel v paměti
Př. Uložení čísla 131
Př. Uložení čísla -131
bit Z 14 13
12
11 10
9 8 7 6 5 4 3 2 1 0
hodnota
bit Z 14 13
12
11 10
9 8 7 6 5 4 3 2 1 0
hodnota
0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 1
bit Z 14 13
12
11 10
9 8 7 6 5 4 3 2 1 0
hodnota
1 0 0 0 0 0 0 0 1 0 0 0 0 0 1 1
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 6482 147 483 647
signed short int Krátké celé číslo se znaménkem
16 - 32 76832 767
signed long int Dlouhé celé číslo se znaménkem
32 -2 147 483 6482 147 483 647
signed long long int Velmi dlouhé celé číslo se znaménkem
64 -9 223 372 036 854 775 808
9 223 372 036 854 775 807
signed char Znak se znaménkem
8 -128127
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 04 294 967 295
unsigned short int Krátké celé číslo bez znaménka
16 065 536
unsigned long int Dlouhé celé číslo bez znaménka
32 04 294 967 295
unsigned long long int
Velmi dlouhé celé číslo bez znaménka
64 018 446 744 073 709 551
616
unsigned char Znak bez znaménka
8 0255
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-383.4e38
double Reálné číslo s dvojitou přesností
64 1.7e-3081.7e308
long double Reálné číslo se zvýšenou přesností
80 3.4e-4931.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):
Nejvyšší 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)
Bit 31 30 29 … 24 23 22 21 … 1 0
Význam Znaménko Exponent (8 bitů)
Mantisa (23 bitů)
Racionální datové typy
Double (racionální číslo s dvojitou přesnosti):
Nejvyšší 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)
Bit 63 62 61 … 53 52 51 50 … 1 0
Význam Znaménko Exponent (11 bitů)
Mantisa (52 bitů)
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 bodu v rovině.
Bod tvoří 2 souřadnice – x, y Údaje 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
heczko@fai.utb.cz
218/U3
Prezentace k dispozici na http://vyuka.fai.utb.cz
top related