29
A1PRG - Programování – Seminář Ing. Michal Heczko [email protected] Datové typy 6 Verze 2009.01

Datové typy

  • Upload
    jenski

  • View
    88

  • Download
    0

Embed Size (px)

DESCRIPTION

Verze 2009.01. Datové typy. 6. A1PRG - Programování – Seminář Ing. Michal [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. - PowerPoint PPT Presentation

Citation preview

Page 1: Datové typy

A1PRG - Programování – Seminář

Ing. Michal Heczko [email protected]

Datové typy6

Verze 2009.01

Page 2: Datové typy

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

Page 3: Datové typy

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.

Page 4: Datové typy

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

Page 5: Datové typy

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

Page 6: Datové typy

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

Page 7: Datové typy

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

Page 8: Datové typy

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

Page 9: Datové typy

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.

Page 10: Datové typy

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);

Page 11: Datové typy

Celočíselné datové typy

Page 12: 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

Page 13: Datové typy

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.

Page 14: Datové typy

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ů)

Page 15: Datové typy

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ů)

Page 16: Datové typy

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);

}

Page 17: Datové typy

Prázdný typ

Pokud funkce nemá žádnou návratovou hodnotu:

void pozdrav(void){printf(„AHOJ!\n");

}

Page 18: Datové typy

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;

Page 19: Datové typy

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.

Page 20: Datové typy

Výčtový typ

Obecná syntaxe:typedef enum {HODNOTA1, HODNOTA2, … , HODNOTAN} JMENO;

Příklad:typedef enum {PONDELI, UTERY, STREDA, CTVRTEK, PATEK, SOBOTA, NEDELE} DNY;

Page 21: Datové typy

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!");

Page 22: Datové typy

Celočíselné datové typy

Page 23: 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, …)

Page 24: Datové typy

Struktury

Definice struktury:

struct <nazev> {

<promenna1>;

<promenna2>;

…;

<promennaN>;

};

Příklad:

struct bod{

int x;

int y;

};

Page 25: Datové typy

Struktury

Inicializace struktury:

struct <nazevstruktury> <identifikator> = { <hodnota1>, <hodnota2>, …, <hodnotaN>};

Příklad:

struct bod A = {3, 2};

Page 26: Datové typy

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;

Page 27: Datové typy

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};

Page 28: Datové typy

Celočíselné datové typy

Page 29: 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