Vstup, výstup BI-PA1 Programování a algoritmizace 1, ZS

Slides:



Advertisements
Podobné prezentace
A1PRG - Programování – Seminář Ing. Michal Typová konverze, oblast platnosti, paměťové třídy 9 Verze
Advertisements

Základy ukládání dat v počítači
Standardní knihovní funkce pro práci s textovými řetězci
VISUAL BASIC Práce s řetězci Použitá literatura: Kvoch: Visual Basic 4.
Racionální čísla, operátory, výrazy, knihovní funkce
Základní pojmy v jazyce C
VISUAL BASIC Práce se soubory.
Algoritmy I Cvičení č. 2. Cíl hodiny Datové typy a přetypování (int, float, double, bool, char, long, short) Konstanty – Celočíselné Desítkové – 15, 0,
Operátory (1. část) 3 A1PRG - Programování – Seminář
Struktury, qsort, mergesort BI-PA1 Programování a algoritmizace 1, ZS Katedra teoretické informatiky © Miroslav Balík Fakulta informačních technologií.
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í.
OSNOVA: a) Řetězce v C b) Funkce stdio.h pro řetězce c) Funkce string.h pro řetězce d) Příklad Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače.
Jednoduché datové typy
A1PRG - Programování – Seminář Ing. Michal Operátory (2. část) 4 Verze
Základy číslicové techniky
Základy číslicové techniky
Číselné soustavy david rozlílek ME4B
Data Přednáška z předmětu Počítače I Dana Nejedlová Katedra informatiky EF TUL 1.
KOMBINAČNÍ LOGICKÉ FUNKCE
Časová složitost algoritmů, řazení a vyhledávání
A1PRG - Programování – Seminář Ing. Michal Ukazatele a pole 10 Verze
JavaScript Podmínky, cykly a pole.
Cvičení.
3. Příkazy  Příkazy dělíme na jednoduché a strukturované.  Jednoduché příkazy - žádnou jejich dílčí částí neni příkaz - přiřazovací, vstupu a výstupu,
Vstupy a výstupy znaků a) Terminálový vstup a výstup ( getchar(), putchar() ) Přečtěte znak pomocí systémové funkce getchar() a vypište ho pomocí putchar().
Datové typy a struktury
Orbis pictus 21. století Tato prezentace byla vytvořena v rámci projektu.
Příklady v jazyku C – část 3
A1PRG - Programování – Seminář Ing. Michal Standardní knihovní funkce pro vstup a výstup 12 Verze
Příklady v jazyku C – část 2
Aplikační a programové vybavení
Orbis pictus 21. století Tato prezentace byla vytvořena v rámci projektu.
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.
Gymnázium prof. Jana Patočky Jindřišská Praha 1 „Praha & EU: Investujeme do vaší.
Realloc a qsort examples BI-PA1 Programování a algoritmizace 1 Katedra teoretické informatiky © Miroslav Balík Fakulta informačních technologií České vysoké.
Uložení čísel v počítači Informatika pro ekonomy II doplněk.
Ukazatele BI-PA1 Programování a algoritmizace 1, ZS Katedra teoretické informatiky © Miroslav Balík Fakulta informačních technologií České vysoké.
Orbis pictus 21. století Tato prezentace byla vytvořena v rámci projektu.
Příklady v jazyku C – část 1. Výstupy pomocí printf. printf(" Tisk textu \n v apostrofech \n ") ; p=10; printf("%d\n", p) ; /* tisk konstanty */ printf("Tisk.
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.
Soubory BI-PA1 Programování a algoritmizace 1, ZS Katedra teoretické informatiky © Miroslav Balík Fakulta informačních technologií České vysoké.
Příklady v jazyku C – část 2
Název školyStřední odborná škola a Gymnázium Staré Město Číslo projektuCZ.1.07/1.5.00/ AutorIng. Ivana Brhelová Název šablonyIII/2.
Příklady v jazyku C – část 2
České vysoké učení technické Fakulta elektrotechnická Datové typy, výrazy vstup, výstup Jazyk JAVA A0B36PRI - PROGRAMOVÁN Í v1.02.
Počítače a programování 1 2.přednáška. Základní lexikální struktura programu Program v jazyce Java je tvořen symboly a oddělovači Program Java je psán.
Funkce, intuitivní chápání složitosti
Orbis pictus 21. století Tento projekt je spolufinancován Evropským sociálním fondem a státním rozpočtem České republiky Blokové schéma počítače.
Programování KONSTANTY, ČTENÍ PO JEDNOM ZNAKU GETCHAR() FORMÁTOVANÝ VÝSTUP POMOCÍ PRINTF, VÝVOJOVÉ DIAGRAMY, CYKLY.
Programovací jazyk C# 2. část. Datové typy C# rozeznává dva druhy datových typů, hodnotové a referenční. Hodnotové datové typy Proměnné hodnotového datového.
Reprezentace dat v počítači. základní pojmy  BIT označení b nejmenší jednotka informace v paměti počítače název vznikl z angl. BINARY DIGIT (dvojkové.
Praha & EU: Investujeme do vaší budoucnosti Evropský sociální fond Gymnázium, Praha 10, Voděradská 2 Projekt OBZORY Datové typy a operátory Základní programové.
Programování ÚVOD, PROMĚNNÉ, OPERÁTORY A PODMÍNĚNÝ PŘÍKAZ ERIK KRÁL.
Algoritmizace a programování
Výukový materiál zpracován v rámci projektu
Výukový materiál zpracován v rámci projektu
Úvod do informačních technologií autor Mgr. Jana Truxová
Výukový materiál zpracován v rámci projektu
Výukový materiál zpracován v rámci projektu
Vzorové řešení zápočtového testu
Financováno z ESF a státního rozpočtu ČR.
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.
Ukládání dat v paměti počítače
AUTOMATIZAČNÍ TECHNIKA Číselné soustavy
Funkce výstupu (2) Funkce printf: deklarována v: stdio.h
Řetězce (24) Funkce strchr: deklarována v: string.h
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.
Opakování ze 3. cvičení deklarace proměnných výpis na monitor (výstup)
Proměnné (1) Proměnná: Definice proměnných:
Opakování ze 4. cvičení int a; printf("Zadej číslo: ");
Transkript prezentace:

Vstup, výstup BI-PA1 Programování a algoritmizace 1, ZS 2014-2015 Příprava studijního programu Informatika je podporována projektem financovaným z Evropského sociálního fondu a rozpočtu hlavního města Prahy. Praha & EU: Investujeme do vaší budoucnosti Vstup, výstup BI-PA1 Programování a algoritmizace 1, ZS 2014-2015 Katedra teoretické informatiky © Miroslav Balík Fakulta informačních technologií České vysoké učení technické ZS - 2012-2013ALG

PA1 - 02 Paměť počítače Výpočetní proces je posloupnost akcí nad daty uloženými v paměti počítače. Data jsou v paměti reprezentována posloupnostmi bitů (bit = binary digit - 0 nebo 1). Připomeňme: paměť je tvořena řadou 8-mi bitových paměťových míst nazývaných bajt (z angl. byte, česky též byte, slabika či oktet). rozlišujeme vnitřní (operační) paměť a vnější paměť (např. disk) každé paměťové místo vnitřní paměti má svou adresu (nezáporné celé číslo), která slouží pro jeho identifikaci kapacita paměti se udává v MB (1 MB = 1000000 B) nebo GB (1 GB = Mld. B) ČSN IEC 60027-2 (rok 1998) 1 Kibibyte=KiB=1024B, 1MiB, 1GiB Instrukce strojového jazyka předepisují aritmetické, logické a jiné operace s posloupnostmi bitů bez ohledu na to, jaká data posloupnost bitů reprezentuje. Ing. Miroslav Balík, Ph.D. - BI-PA1- 02 ZS - 2012-2013ALG

PA1 - 02 Datové typy Při návrhu algoritmů a psaní programů ve vyšších programovacích jazycích abstrahujeme od binární podoby paměti počítače S daty pracujeme jako s hodnotami různých datových typů, které jsou uloženy v datových objektech. Datový typ ( zkráceně jen typ ) specifikuje: množinu hodnot množinu operací, které lze s hodnotami daného typu provádět Příklad typu: celočíselný typ int v jazyku C: množinou hodnot ve 32-bitovém prostředí jsou celá čísla z intervalu -2147483648 .. 2147483647 (proč?) množinu operací tvoří: aritmetické operace +, -, *, /, jejichž výsledkem je hodnota typu int relační operace ==, !=, >, >=, <, <=, jejichž výsledkem je hodnota typu int a další Typ int je jednoduchý typ, jehož hodnoty jsou atomické ( z hlediska operací dále nedělitelné ) Ing. Miroslav Balík, Ph.D. - BI-PA1- 02 ZS - 2012-2013ALG

Proměnné, přiřazení, výpis hodnoty PA1 - 02 Proměnné, přiřazení, výpis hodnoty Proměnná je datový objekt, který je označen jménem a je v něm uložena hodnota nějakého typu, která se může měnit V jazyku C zavedeme výše uvedenou proměnnou deklarací int alfa = 0; Hodnotu proměnné lze změnit přiřazovacím příkazem alfa = 37; Hodnotu této proměnné typu int lze v jazyku C vypsat (s přechodem na nový řádek) příkazem: printf(“%d\n”, alfa); alfa jméno proměnné datový objekt hodnota proměnné alfa alfa 37 proměnná, jejíž hodnota se vypíše celočíselná dekadická konverze Ing. Miroslav Balík, Ph.D. - BI-PA1- 02 ZS - 2012-2013ALG

Proměnné, přiřazení, výpis hodnoty PA1 - 02 Proměnné, přiřazení, výpis hodnoty Vyzkoušejme to /* prog2-1a.c */ #include <stdio.h> #include <stdlib.h> int main(void) { int alfa = 0; printf("%d\n", alfa); alfa = 37; return 0; } deklarace lokální proměnné příkaz výstupu přiřazovací příkaz Ing. Miroslav Balík, Ph.D. - BI-PA1- 02 ZS - 2012-2013ALG

Proměnné, přiřazení, výpis hodnoty PA1 - 02 Proměnné, přiřazení, výpis hodnoty A co když lokální proměnnou deklarujeme bez inicializace? /* prog2-1b.c */ #include <stdio.h> #include <stdlib.h> int main(void) { int alfa; /* nema definovanou hodnotu */ printf("%d\n", alfa); alfa = 37; return 0; } Co program vypíše? Ing. Miroslav Balík, Ph.D. - BI-PA1- 02 ZS - 2012-2013ALG

PA1 - 02 Globální proměnné V jazyku C lze na úrovni souboru (tj. mimo funkci) deklarovat globální proměnné Globální proměnné jsou inicializovány nulou /* prog2-1c.c */ #include <stdio.h> #include <stdlib.h> int alfa; /* globalni promenna, inicializace nulou */ int main(void) { /* globalni promennou alfa lze pouzit */ printf("%d\n", alfa); alfa = 37; return 0; } Ing. Miroslav Balík, Ph.D. - BI-PA1- 02 ZS - 2012-2013ALG

Tyto dva příkazy lze spojit do jednoho PA1 - 02 Dále k výpisu Před hodnotu proměnné chceme vypsat titulek /* prog2-2a.c */ #include <stdio.h> #include <stdlib.h> int main(void) { int alfa = 0; printf("hodnota alfa po deklaraci: "); printf("%d\n", alfa); alfa = 37; printf("hodnota alfa po prirazeni: "); return 0; } Tyto dva příkazy lze spojit do jednoho Ing. Miroslav Balík, Ph.D. - BI-PA1- 02 ZS - 2012-2013ALG

Dále k výpisu Výpis řetězce a hodnoty proměnné jediným příkazem printf PA1 - 02 Dále k výpisu Výpis řetězce a hodnoty proměnné jediným příkazem printf /* prog2-2b.c */ #include <stdio.h> #include <stdlib.h> int main(void) { int alfa = 0; printf("hodnota alfa po deklaraci: %d\n", alfa); alfa = 37; printf("hodnota alfa po prirazeni: %d\n", alfa); return 0; } Ing. Miroslav Balík, Ph.D. - BI-PA1- 02 ZS - 2012-2013ALG

PA1 - 02 Výpis hodnoty výrazu Vypisovat můžeme nejen hodnoty proměnných, ale též hodnoty výrazů Příklad: /* prog2-2c.c */ #include <stdio.h> #include <stdlib.h> int main(void) { int alfa = 0; printf("hodnota alfa po deklaraci: %d\n", alfa); alfa = 37; printf("hodnota alfa po prirazeni: %d\n", alfa); printf("hodnota vyrazu alfa+4: %d\n", alfa+4); return 0; } proměnná výraz Ing. Miroslav Balík, Ph.D. - BI-PA1- 02 ZS - 2012-2013ALG

PA1 - 02 Šířka vypsané položky Konverze může obsahovat (mezi znaky % a d) kladné celé číslo udávající šířku vypsané položky, tj. celkový počet vypsaných znaků (zleva se doplní mezery) Příklad: /* prog2-2c.c */ #include <stdio.h> #include <stdlib.h> int main(void) { int alfa = 0; printf("hodnota alfa po deklaraci: %5d\n", alfa); alfa = 37; printf("hodnota alfa po prirazeni: %5d\n", alfa); printf(" hodnota vyrazu alfa+4: %5d\n", alfa+4); return 0; } šířka položky Ing. Miroslav Balík, Ph.D. - BI-PA1- 02 ZS - 2012-2013ALG

PA1 - 02 Vstup čísel typu int Hodnoty proměnných často čteme ze vstupních dat (např. z klávesnice) Pro čtení hodnot z klávesnice použijeme knihovní funkci scanf Příklad čtení čísla typu int: /* prog2-3a.c */ #include <stdio.h> #include <stdlib.h> int main(void) { int a; printf("zadejte cele cislo\n"); scanf("%d", &a); printf("zadane cislo je\n"); printf("a=%d\n", a); return 0; } celočíselná dekadická konverze adresa proměnné, do které se uloží přečtené číslo Ing. Miroslav Balík, Ph.D. - BI-PA1- 02 ZS - 2012-2013ALG

Vstup čísel typu int Činnost funkce scanf při konverzi %d: PA1 - 02 Vstup čísel typu int Činnost funkce scanf při konverzi %d: ignoruje počáteční mezery a oddělovače řádků zápis čísla musí začínat znaménkem nebo dekadickou číslicí čtení skončí na prvním znaku, který není dekadickou číslicí musí být přečtena alespoň jedna dekadická číslice Funkce vrací hodnotu, kterou je počet úspěšně přečtených čísel (obecně položek) /* prog2-3b.c */ #include <stdio.h> #include <stdlib.h> int main(void) { int a=0, v; printf("zadejte cele cislo\n"); v=scanf("%d", &a); if (v==1) printf("zadane cislo je\n"); else printf(„nespravne zadane cislo\n"); printf("a=%d\n", a); return 0; } Ing. Miroslav Balík, Ph.D. - BI-PA1- 02 ZS - 2012-2013ALG

PA1 - 02 Vstup čísel typu int Jedním voláním funkce scanf lze přečíst několik čísel Příklad: /* prog2-3c.c */ #include <stdio.h> #include <stdlib.h> int main(void) { int a = 0, b = 0, c = 0, v; printf("zadejte tri cela cisla\n"); v=scanf("%d%d%d", &a, &b, &c); if (v==3) printf("zadana cisla jsou\n"); else printf(„nektere cislo bylo spatne zadane\n"); printf("a=%d b=%d c=%d\n", a, b, c); return 0; } Ing. Miroslav Balík, Ph.D. - BI-PA1- 02 ZS - 2012-2013ALG

PA1 - 02 Celočíselné typy Velikost vnitřní reprezentace (B), min. a max. hodnota platí pro 32bitové prostředí označení ekviv. označení B minimální hodnota maximální hodnota int signed int signed 4 –2 147 483 648 tj. –231  2 147 483 647 tj. 231-1 unsigned unsigned int 4 294 967 295 tj. 232-1 short short int short signed int 2 –32 768 tj. –215 32 767 tj. 215-1 unsigned short unsigned short int 65 535 tj. 216-1 long long int signed long int signed long unsigned long unsigned long int char signed char 1 -128 tj. -27 127 tj. 27-1 unsigned char 255 tj. 28-1 Ing. Miroslav Balík, Ph.D. - BI-PA1- 02 ZS - 2012-2013ALG

Celočíselné typy Není-li uvedena přípona, jde o literál typu int PA1 - 02 Celočíselné typy Rozsahy celočíselných typů v C nejsou dány normou, ale implementací (pro 16ti bitové prostředí jsou jiné než je uvedeno v předchozí tabulce limits.h, float.h Norma pouze garantuje short <= int <= long unsigned short <= unsigned <= unsigned long Celočíselné literály (zápisy čísel): dekadický 123 456789 hexadecimální 0x12 0xFFFF (začíná 0x nebo 0X) oktalový 0123 0567 (začíná 0) unsigned 123456U (přípona U nebo u) long 123456L (přípona L nebo l) unsigned long 123456UL (přípona UL nebu ul) Není-li uvedena přípona, jde o literál typu int Ing. Miroslav Balík, Ph.D. - BI-PA1- 02 ZS - 2012-2013ALG

Vnitřní reprezentace celočíselných typů PA1 - 02 Vnitřní reprezentace celočíselných typů Nezáporná celá čísla (unsigned) jsou zobrazena posloupností bitů (8, 16, 32) reprezentující číslo ve dvojkové soustavě (binární číslo délky 8, 16, 32 bitů) unsigned char x = 5; Celá čísla – nezáporná a záporná (signed) - jsou zobrazena pomocí nějakého kódu Nejčastěji se používá doplňkový kód (dvojkový doplněk) V doplňkovém kódu je celé číslo x zobrazeno binárním číslem x’ délky n takto: x’ = x pro x >= 0 x’ = x + M pro x < 0, kde M = 2n char y = -5; x + M = -5 + 256 = 251 25110 = 11111012 00000101 11111011 nejvyšší bit (znaménko) nejnižší bit Ing. Miroslav Balík, Ph.D. - BI-PA1- 02 ZS - 2012-2013ALG

Vnitřní reprezentace celočíselných typů PA1 - 02 Vnitřní reprezentace celočíselných typů Doplňkový obraz záporného čísla vytvoříme také tímto způsobem vytvoříme binární obraz absolutní hodnoty invertujeme jednotlivé binární číslice (0 změníme na 1 a 1 změníme na 0) binárně připočteme 1 Příklad pro -5 binární obraz absolutní hodnoty 00000101 inverze bitů 11111010 +1 1 výsledek 11111011 Ing. Miroslav Balík, Ph.D. - BI-PA1- 02 ZS - 2012-2013ALG

Celočíselné výstupní konverze PA1 - 02 Celočíselné výstupní konverze Při výpisu hodnoty celočíselného typu lze použít následující celočíselné konverze: d celé číslo dekadicky se znaménkem i celé číslo dekadicky se znaménkem u celé číslo dekadicky bez znaménka x celé číslo hexadecimálně bez znaménka (hex. číslice a,b,c,d,e,f) X celé číslo hexadecimálně bez znaménka (hex. číslice A,B,C,D,E,F) o celé číslo oktalově bez znaménka #include <stdio.h> #include <stdlib.h> int main(void) { /* prog2-4a.c */ int i=0xffffffff; printf(“konverze x %x\n“", i); printf(“konverze o %o\n“", i); printf(“konverze d %d\n“", i); printf(“konverze u %u\n“", i); return 0; } ffffffff 37777777777 -1 4294967295 Ing. Miroslav Balík, Ph.D. - BI-PA1- 02 ZS - 2012-2013ALG

Znaky Pro zobrazení znaků v paměti počítače existuje řada kódů Kód zobrazení znaků stanovuje pro každý znak z určité množiny znaků nezáporné celé číslo, kterým je znak v paměti zobrazen Jazyk C používá pro zobrazení znaků kód ASCII (American Standard Code for Information Interchange) ASCII byl původně 7mi bitový, později byl rozšířen na 8 bitů Intervaly kódových (pořadových) čísel: 0 – 31 řídicí znaky, které nemají lexikografické vyjádření mezera 33 – 127 písmena americké abecedy, dekadické číslice a další znaky 128 – 255 písmena národních abeced dle kódové stránky (nebudeme používat) V následující tabulce jsou uvedeny znaky a jejich kódy pro 7mi bitový kód ASCII Ing. Miroslav Balík, Ph.D. - BI-PA1- 02 ZS - 2012-2013ALG

Kód ASCII !! 1 2 3 4 5 6 7 NUL SOH STX ETX EOT ENQ ACK BEL 8 BS HT LF PA1 - 02 Kód ASCII !! 1 2 3 4 5 6 7 NUL SOH STX ETX EOT ENQ ACK BEL 8 BS HT LF VT FF CR SO SI 16 DLE DC1 DC2 DC3 DC4 NAK SYN ETB 24 CAN EM SUB ESC FS GS RS US 32 ! “ # $ % & ‘ 40 ( ) * + , - . / 48 56 9 : ; < = > ? 64 @ A B C D E F G 72 H I J K L M N O 80 P Q R S T U V W 88 X Y Z [ \ ] ^ _ 96 ` a b c d e f g 104 h i j k l m n o 112 p q r s t u v w 120 x y z { | } ~ DEL Ing. Miroslav Balík, Ph.D. - BI-PA1- 02 ZS - 2012-2013ALG

Literály typu char Literál typu char: znak uzavřený mezi apostrofy PA1 - 02 Literály typu char Literál typu char: znak uzavřený mezi apostrofy 'a' '@' '1' char c = 'A'; Pozor: posloupnost znaků uzavřená mezi uvozovkami je řetězec znaků! Znak, který nemá lexikografické vyjádření, zadáme pomocí kódového čísla v osmičkové nebo šestnáctkové soustavě '\012' '\xa' (LF) Pro některé řídící a jiné znaky je možno použít tzv. escape-sekvenci znak zápis kód (10) nový řádek '\n' 10 tabelátor '\t' 9 apostrof '\'' 39 zp. lomítko '\\' 92 Ing. Miroslav Balík, Ph.D. - BI-PA1- 02 ZS - 2012-2013ALG

Znaková výstupní konverze PA1 - 02 Znaková výstupní konverze Při výstupu hodnoty celočíselného typu lze použít znakovou konverzi printf(“%c”, výraz); Z hodnoty výrazu se vezme nejnižší (nejméně významný) bajt, jeho hodnota se interpretuje jako kódové číslo znaku a znak se vypíše Příklad: /* prog2-4b.c */ #include <stdio.h> #include <stdlib.h> int main(void) { char c = ‘@’; int i = 64; unsigned u = 0xFF40; printf(“c %x %d %c\n“, c, c, c); printf(“c %x %d %c\n“, i, i, i); printf(“c %x %d %c\n“, u, u, u); return 0; } 40 64 @ 40 64 @ ff40 65344 @ Ing. Miroslav Balík, Ph.D. - BI-PA1- 02 ZS - 2012-2013ALG

Znaková vstupní konverze PA1 - 02 Znaková vstupní konverze Jeden znak z klávesnice přečteme pomocí funkce scanf a vstupní konverze %c /* prog2-4d.c */ #include <stdio.h> #include <stdlib.h> int main(void) { char c; printf("zadejte z klavesnice znak a pak Enter\n"); scanf("%c", &c); printf("zadali jste znak %c, hexkod %x\n", c, c); return 0; } Ing. Miroslav Balík, Ph.D. - BI-PA1- 02 ZS - 2012-2013ALG

Přiřazovací příkaz Slouží pro přiřazení hodnoty proměnné PA1 - 02 Přiřazovací příkaz Slouží pro přiřazení hodnoty proměnné Tvar přiřazovacího příkazu: proměnná = výraz; Příklad: x = y + z; proměnné x se přiřadí součet hodnot proměnných y a z x = x + 1; hodnota proměnné x se zvětší o 1 Proměnné lze přiřadit pouze hodnotu jejího typu Výraz na pravé straně přiřazení může být jiného typu, než je typ proměnné, hodnota se konvertuje na typ proměnné (pokud existuje implicitní konverze) Ing. Miroslav Balík, Ph.D. - BI-PA1- 02 ZS - 2012-2013ALG

Konverze při přiřazení celočíselných typů PA1 - 02 Konverze při přiřazení celočíselných typů sizeof(proměnná) = sizeof(hodnota) Jestliže velikost vnitřní reprezentace proměnné a přiřazované hodnoty je stejná, přiřadí se bitová reprezentace čísla a nic se nemění /* prog2-5a.c */ #include <stdio.h> #include <stdlib.h> int main(void) { int i; unsigned u = 0xffffffff; i = u; printf("u %x %u\n", u, u); printf("i %x %d\n", i, i); return 0; } u ffffffff 4294967295 i ffffffff -1 Ing. Miroslav Balík, Ph.D. - BI-PA1- 02 ZS - 2012-2013ALG

Konverze při přiřazení celočíselných typů PA1 - 02 Konverze při přiřazení celočíselných typů sizeof(proměnná) < sizeof(hodnota) Jestliže velikost vnitřní reprezentace proměnné je menší než velikost vnitřní reprezentace přiřazované hodnoty, nadbytečné horní bajty se ignorují /* prog2-5b.c */ #include <stdio.h> #include <stdlib.h> int main(void) { char c; unsigned u = 0xffffff40; c = u; printf("u %x %u\n", u, u); printf("c %x %c\n", c, c); return 0; } u ffffff40 4294967104 c 40 @ Ing. Miroslav Balík, Ph.D. - BI-PA1- 02 ZS - 2012-2013ALG

Konverze při přiřazení celočíselných typů PA1 - 02 Konverze při přiřazení celočíselných typů sizeof(proměnná) > sizeof(hodnota) a hodnota je unsigned Jestliže velikost vnitřní reprezentace proměnné je větší než velikost vnitřní reprezentace přiřazované hodnoty a hodnota je unsigned (bez znaménka), chybějící horní bajty se vynulují Příklad: /* prog2-5c.c */ #include <stdio.h> #include <stdlib.h> int main(void) { unsigned char c = 0xff; int i; i = c; printf("c %x %d\n", c, c); printf("i %x %d\n", i, i); return 0; } c ff 255 i ff 255 Ing. Miroslav Balík, Ph.D. - BI-PA1- 02 ZS - 2012-2013ALG

Konverze při přiřazení celočíselných typů PA1 - 02 Konverze při přiřazení celočíselných typů sizeof(proměnná) > sizeof(hodnota) a hodnota je signed Jestliže velikost vnitřní reprezentace proměnné je větší než velikost vnitřní reprezentace přiřazované hodnoty a hodnota je signed (se znaménkem), do chybějících horních bajtů se doplní znaménkový (nejvyšší) bit /* prog2-5d.c */ #include <stdio.h> #include <stdlib.h> int main(void) { char c = 0xff; int i; i = c; printf("i %x %d\n", i, i); printf("c %x %d\n", c, c); } i ffffffff -1 c ffffffff -1 hodnota typu char se při předání funkci printf konvertuje na int Ing. Miroslav Balík, Ph.D. - BI-PA1- 02 ZS - 2012-2013ALG