Union neboli sjednocení Bitová pole

Slides:



Advertisements
Podobné prezentace
OZD: Hašování RNDr. Michal Žemlička.
Advertisements

A1PRG - Programování – Seminář Ing. Michal Typová konverze, oblast platnosti, paměťové třídy 9 Verze
Pro začátek něco lehčího
Programovací jazyk C++
Přednáška 11 Jiří Šebesta
Programování 2 Cvičení 5.
25/08/20141 Typ struktura (1) Datový typ struktura ( struct ) je agrego- vaný heterogenní datový typ Jedná se o skupinu několika proměnných, které mohou.
Programování v Pascalu Přednáška 8
Algoritmizace a programování Datové typy v Delphi - 05
Procesory Filip Skulník.
Principy překladačů Běhová podpora Jakub Yaghob. Běhová podpora Statická podpora jazyka Překladač Interface na knihovny Hlavičkové soubory Dynamická podpora.
Principy překladačů Mezikód Jakub Yaghob.
Algoritmizace a programování
Materiály k přednášce Úvod do programování Ondřej Čepek.
- práce se strukturami - bitové operace - bitová pole
Operátory (1. část) 3 A1PRG - Programování – Seminář
Datové struktury. 2 Co je datová struktura v C datový typ složený z jiných datových typů nejjednodušší datová struktura je pole. všechny jeho prvky jsou.
Datové typy 6 A1PRG - Programování – Seminář
Vyučovací hodina 1 vyučovací hodina: Opakování z minulé hodiny 5 min Nová látka 20 min Procvičení nové látky 15 min Shrnutí 5 min 2 vyučovací hodiny: Opakování.
A1PRG - Programování – Seminář Ing. Michal Operátory (2. část) 4 Verze
PicoBlaze, MicroBlaze, PowerPC
C# - pointery Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
Další abstraktní datové typy
Cvičení.
TEP Přerušení č.7. Přerušení Téma Přerušení TEP Předmět TEP Juránek Leoš Ing. Autor Juránek Leoš Ing. TEP.
IB111 Programování a algoritmizace
7. Typ soubor Souborem dat běžně rozumíme uspořádanou množinu dat, uloženou mimo operační paměť počítače (na disku). Pascalský soubor je abstrakcí skutečného.
Začátky mikroprocesorů
Databázové modelování
Ukazatele BI-PA1 Programování a algoritmizace 1, ZS Katedra teoretické informatiky © Miroslav Balík Fakulta informačních technologií České vysoké.
Popis obvodu 8051.
Počítače a programování 1 7.přednáška. Základy Pole ve třídách a metodách Pole Arrays.
6. Typ záznam Strukturovaný datový typ - znamená spojení několika elementů stejného nebo různých typů do jedné proměnné. Např. pole je strukturovaný datový.
Vazby dynamických proměnných,databázové systémy Přednáška č. 10.
OSNOVA: a) Ukazatel b) Pole a ukazatel c) Pole ukazatelů d) Příklady Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače a programování 1 pro.
Ukazatele, řetězce Přednáška č. 3. Ukazatele  Ukazatel (pointer) – typ o velikosti 4 bajty (v 32bit. systémech) pro uložení adresy objektu na který ukazuje.
Pokročilé datové typy (struktury, unie, dynamické proměnné)
Programování v jazyce C++
Technika počítačů 3. Mikroprocesory © Milan Keršlágerhttp:// Obsah: ●
PROGRAMOVÁNÍ 3ITA,3ITB Jaroslav Burdys Hlavní zdroj:
Odborný výcvik ve 3. tisíciletí Tato prezentace byla vytvořena v rámci projektu.
Překladače 6. Sémantická analýza
Odborný výcvik ve 3. tisíciletí Tato prezentace byla vytvořena v rámci projektu.
Programování ÚVOD, PROMĚNNÉ, OPERÁTORY A PODMÍNĚNÝ PŘÍKAZ ERIK KRÁL.
Programování v jazyce C++ Speciality jazyka C++, úvod do OOP.
Typ struktura (1) Datový typ struktura (struct) je agrego-vaný heterogenní datový typ Jedná se o skupinu několika proměnných, které mohou mít různé datové.
Vícerozměrná pole (1) Jazyk C povoluje, aby pole mělo více rozměrů (dimenzí) než jeden Z vícerozměrných polí bývá nejčastěji použí-váno pole dvourozměrné.
Vlastnosti souborů Jaroslava Černá.
Programovací jazyk C++
Jednočipové počítače – základní struktura
Výukový materiál zpracován v rámci projektu
MIKROPROCESOROVÁ TECHNIKA
Překladače Syntaktická analýza
Programovací jazyk C Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Ing. Jitka Vlčková. Dostupné z Metodického portálu ISSN.
Struktury.
Mikropočítač Vnitřní struktura 1
Programování v jazyce C++
Kurz algoritmizace a programování v jazyce C
Abstraktní datové typy
Lexikální atomy jazyka C
Správa paměti.
Dynamické proměnné (1) Proměnné, jejichž počet a (nebo) velikost pa-měti využívané těmito proměnnými se v prů-běhu programu mění Dynamické proměnné lze.
Typ pole (1) Proměnná typu pole představuje kolekci proměnných stejného datového typu, které mohou být označovány společným jménem (identifikátorem) Pole.
Segmentace Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Ing. Libor Otáhalík. Dostupné z Metodického portálu ISSN: 
Adresace paměti Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Ing. Libor Otáhalík. Dostupné z Metodického portálu ISSN: 
Typ ukazatel (1) Proměnné typu ukazatel (pointer) uchovávají paměťovou adresu Hodnota ukazatele říká, kde (na jaké adrese) se v paměti nachází nějaký objekt.
Paměť.
Využití ICT pro rozvoj klíčových kompetencí CZ.1.07/1.5.00/
Funkce s proměnným počtem parametrů
Union neboli sjednocení Bitová pole
Transkript prezentace:

Union neboli sjednocení Bitová pole

Struktura datový typ s heterogenními položkami pro každou položku je rezervováno místo v paměti typedef struct { int cislo; char zn; } TUkazkova; TUkazkova s;

nechť sizeof(int)=4 s.zn s.cislo s

Union (sjednocení) datový typ s heterogenními položkami místo v paměti je rezervováno pouze pro nejdelší položku položky se překrývají v daném okamžiku je platná pouze jedna položka union neposkytuje informaci, která položka byla použita

typedef union { int cislo; char zn; } TUksjedn; TUksjedn u;

nechť sizeof(int)=4 u.cislo u.zn u

uniony se příliš často nepoužívají důvody použití šetření paměti např. ve velkých polích variantní záznam chceme-li se na jeden datový typ „podívat“ několika způsoby, což je implementačně závislé a program pak nemusí být přenositelný

Variantní záznam musím deklarovat jako strukturu s položkami pevnými rozlišovací varianta, což je položka typu union

Příklad: nákladní a osobní auto typedef enum {OS, NAKL} TypA; typedef union { float nosnost; int pocet_osob; } Parametry; typedef struct { char SPZ[7]; /*spol. polozka */ TypA typ; /* rozhodovaci polozka */ Parametry param; } TAuto;

TAuto auta[10]; auto[0].typ = OS; auto[0].param.pocet_osob = 4; auto[1].typ = NAKL; auto[1].param.nosnost = 4; výraz auto[1].param.pocet_osob překladač akceptuje, ale je logicky nesprávný

položky sjednocení mohou být i struktury typedef struct {float f, float g} TDes; typedef struct {int i, int j} TCela; typedef union { TDes d; TCela c; } TOboje; TOboje o; o.c.i = 3; o.d.g = 4.55;

Příklad: předpokládáme opět velikost typu int 4 slabiky typedef union { int x; struct { unsigned char b0; unsigned char b1; unsigned char b2; unsigned char b3; } slabiky; } TKukatko;

TKukatko k; k.slabiky.b3 k.slabiky.b2 k.x k.slabiky.b1 k.slabiky.b0

na nultou slabiku se „podívám“: k.slabiky.b0; přiřazení hodnoty k x: k.x = 328; na nultou slabiku se „podívám“: k.slabiky.b0; ale pouze u procesorů Intel, protože nemám zaručeno, že položka b0 bude odpovídat slabice nižšího řádu u překladačů pro procesory s uložením big endian (např. Motorola) se takto „podívám“ naopak na slabiku nejvyššího řádu překladač může upravit hranice mezi položkami záleží na překladači a platformě (procesoru)

Bitová pole

Bitové pole struktura, jejíž velikost je omezena velikostí typu int (maximálně) minimální velikost jedné položky je 1 bit vhodné pro přístup pomocí k bitům pomocí identifikátorů používáme tam, kde chceme ušetřit paměť používané zejména u překladačů jazyka C pro jednočipové mikropočítače

Příklad: typedef struct { unsigned int den :5; /* bity 0 až 4 */ unsigned int mesic :4; /* bity 5 až 8 */ unsigned int rok :23; /* bity 9 až 31 */ } TDatum; TDatum datum; datum.den = 12;

Příklad: příznakový registr OPTION jednočipového mikropočítače PIC typedef struct { unsigned int PS0 :1; unsigned int PS1 :1; unsigned int PS2 :1; unsigned int PSA :1; unsigned int RTE :1; unsigned int RTS :1; } TOption;

TOption option at xxxx; deklaruji proměnnou na příslušnou adresu TOption option at xxxx; některé překladače pro jednočipové procesory mají direktivu např. at, @, která umožňuje mapovat proměnnou na konkrétní adresu do paměti k jednotlivým bitům přistupuji „normálně“, nemusím používat masku a logické operace if (option.PSA == 1)

pokud bych chtěl přistupovat k bitům PS jako ke trojici, resp pokud bych chtěl přistupovat k bitům PS jako ke trojici, resp. k celému registru, nadeklaruji sjednocení struktur typedef struct { unsigned int PS :3; unsigned int PSA :1; unsigned int RTE :1; unsigned int RTS :1; } TOption2; typedef union { TOption o1; TOption2 o2; unsigned char cely; } TOptionReg;

přístup k celému registru přístup k hodnotě PS přístup k bitu RTS TOptionReg registr at xxxx; přístup k celému registru registr.cely = 0x20; přístup k hodnotě PS registr.o2.PS = 0x03; přístup k bitu RTS registr.o2.RTS = 1; nebo registr.o1.RTS = 1;