Bitové operátory a bitová pole. Úvod do programování 2 Tomáš Kühr

Podobné dokumenty
Práce s řetězci. IUJCE Přednáška č. 10. string.h. vrací: délku řetězce str (bez '\0')

int => unsigned int => long => unsigned long => float => double => long double - tj. bude-li:

IUJCE 07/08 Přednáška č. 1

Odvozené a strukturované typy dat

Programování v jazyce C pro chemiky (C2160) 12. Specifické problémy při vývoji vědeckého softwaru

- tzv. standardní vstupní a výstupní proud (input / output stream)

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15

Strukturované typy a ukazatele. Úvod do programování 1 Tomáš Kühr

for (i = 0, j = 5; i < 10; i++) { // tělo cyklu }

Správné vytvoření a otevření textového souboru pro čtení a zápis představuje

Opakování programování

Algoritmizace a programování

1.1 Struktura programu v Pascalu Vstup a výstup Operátory a některé matematické funkce 5

5 Přehled operátorů, příkazy, přetypování

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií

- dělají se také pomocí #define - podobné (použitím) funkcím - předpřipravená jsou např. v ctype.h. - jak na vlastní makro:

Algoritmizace a programování

Řešení sady 1. Úvod do programování 1 Tomáš Kühr

Třídy a struktury v C++

Inovace a zkvalitnění výuky prostřednictvím ICT Základy programování a algoritmizace úloh. Ing. Hodál Jaroslav, Ph.D. VY_32_INOVACE_25 09

Zápis znakù pomocí výjimkových kódù

- speciální symboly + - * / =., < > <> <= >= a další. Klíčová slova jsou chráněnými útvary, které nelze použít ve významu identifikátorů.

IUJCE 07/08 Přednáška č. 4. v paměti neexistuje. v paměti existuje

Práce s binárními soubory. Základy programování 2 Tomáš Kühr

Proměnná a její uložení v paměti

Knihovní funkce jazyka C

Úvod do programování. Lekce 1

Funkce pokročilé možnosti. Úvod do programování 2 Tomáš Kühr

Operátory, výrazy. Tomáš Pitner, upravil Marek Šabo

Programování v C++ 1, 1. cvičení

Pole a Funkce. Úvod do programování 1 Tomáš Kühr

ZPRO v "C" Ing. Vít Hanousek. verze 0.3

Práce se soubory. Úvod do programování 2 Tomáš Kühr

Práce se soubory. Úvod do programování 2 Tomáš Kühr

Př. další použití pointerů

Výrazy, operace, příkazy

Základy programování (IZP)

Paměť počítače. alg2 1

Programování v C++, 2. cvičení

Úvod do programovacích jazyků (Java)

Operační systémy. Cvičení 3: Programování v C pod Unixem

Výrazy a operátory. Operátory Unární - unární a unární + Např.: a +b

Jak v Javě primitivní datové typy a jejich reprezentace. BD6B36PJV 002 Fakulta elektrotechnická České vysoké učení technické

Ukazatel (Pointer) jako datový typ - proměnné jsou umístěny v paměti na určitém místě (adrese) a zabírají určitý prostor (počet bytů), který je daný

Programovací jazyk C++ Hodina 1

Lekce 6 IMPLEMENTACE OPERAČNÍHO SYSTÉMU LINUX DO VÝUKY INFORMAČNÍCH TECHNOLOGIÍ JAZYK C

Základní pojmy. Úvod do programování. Základní pojmy. Zápis algoritmu. Výraz. Základní pojmy

2 Základní funkce a operátory V této kapitole se seznámíme s použitím funkce printf, probereme základní operátory a uvedeme nejdůležitější funkce.

Logické operace. Datový typ bool. Relační operátory. Logické operátory. IAJCE Přednáška č. 3. může nabýt hodnot: o true o false

Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. October 17, 2016

9. lekce Úvod do jazyka C 4. část Funkce, rekurze Editace, kompilace, spuštění Miroslav Jílek

Práce se soubory. Základy programování 2 Tomáš Kühr

Zápis programu v jazyce C#

Data, výrazy, příkazy

Základy programování (IZP)

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

Objektově orientované programování

Základy C++ I. Jan Hnilica Počítačové modelování 18

Programovací jazyk Pascal

Operační systémy. Cvičení 4: Programování v C pod Unixem

Jazyk C# a platforma.net

Algoritmizace prostorových úloh

Základní datové typy, proměnné - deklarujeme předem - C je case sensitive rozlišuje malá a velká písmena v názvech proměnných a funkcí

Racionální čísla, operátory, výrazy, knihovní funkce

Programování v jazyce C a C++

Programování v C++ 3, 3. cvičení

Jazyk C práce se soubory. Jan Hnilica Počítačové modelování 16

Mělká a hluboká kopie

Struktura programu v době běhu

Prezentace a vysvětlení programového prostředí NXC

Program převod z desítkové na dvojkovou soustavu: /* Prevod desitkove na binarni */ #include <stdio.h>

Šablonové metaprogramování v C++ Miroslav Virius KSI FJFI ČVUT

Ahoj mami. Uložení dat v počítači. Příklady kódování dat. IAJCE Přednáška č. 4

Programování v C++ 2, 4. cvičení

Pointery II. Jan Hnilica Počítačové modelování 17

PŘETĚŽOVÁNÍ OPERÁTORŮ

Základy jazyka C. Základy programování 1 Martin Kauer (Tomáš Kühr)

Strukturu lze funkci předat: (pole[i])+j. switch(výraz) velikost ukazatele

IUJCE Přednáška č. 1. programování v C na vyšší úrovni základy objektově orientovaného programovaní v (C++, C#)

Popis funkcí a maker standardních knihoven

Programování v C++ 1, 14. cvičení

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

- jak udělat konstantu long int: L long velka = 78L;

Stručný obsah První týden Druhý týden 211 Třetí týden 451 Rejstřík 787

Více o konstruktorech a destruktorech

IMPLEMENTACE OPERAČNÍHO SYSTÉMU LINUX DO VÝUKY INFORMAČNÍCH TECHNOLOGIÍ JAZYK C

Proměnná. Datový typ. IAJCE Cvičení č. 3. Pojmenované místo v paměti sloužící pro uložení hodnoty.

Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace

PB161 Programování v jazyce C++ Přednáška 9

V dalších letech se pak začaly objevovat první normy pro jazyk C++ (ISO/IEC 14882:1998; ISO/IEC 9899:1999; ISO/IEC 14882:2003; ISO/IEC 14882:2011).

10 Práce s řetězci - pokračování

Úvod do programovacích jazyků (Java)

Koncepce (větších) programů. Základy programování 2 Tomáš Kühr

Základy programování (IZP)

přetížení operátorů (o)

IAJCE Přednáška č. 7. řízení semaforu na křižovatce = přepínání červená/oranžová/zelená

EVROPSKÝ SOCIÁLNÍ FOND. Úvod do PHP PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI

8 Třídy, objekty, metody, předávání argumentů metod

Preprocesor. Karel Richta a kol. katedra počítačů FEL ČVUT v Praze. Karel Richta, Martin Hořeňovský, Aleš Hrabalík, 2016

Racionální čísla, operátory, výrazy, knihovní funkce

Transkript:

Bitové operátory a bitová pole Úvod do programování 2 Tomáš Kühr

Bitové operátory Provádějí danou operaci s jednotlivými bity svých operandů Operandy bitových operátorů mohou být pouze celočíselné Vyhodnocení bitových operátorů je relativně rychlé Bitové operátory: & (součin), (součet), ^ (nonekvivalence, XOR), >> (posun vpravo), << (posun vlevo), ~ (negace) Příklady: char c = 'a'; c = c & 0xDF; // prevod na velka pismena c = 0x20; // prevod na mala písmena int x = 5; x = x << 3; // nasobeni 3. mocninou cisla 2 x >>= 3; // deleni 3. mocninou cisla 2

Práce s jednotlivými bity Bitové operátory se často používají při práci s více informacemi uloženými v jediné proměnné Umožňují tak snížit množství využívané paměti A často i zrychlení výpočtu alespoň v některých situacích Jen mírně složitěji lze pracovat také se skupinami bitů Příklady: #define READ 0x8 #define WRITE 0x10 #define DELETE 0x20 unsigned int status; status = READ WRITE DELETE; status = READ WRITE; status &= ~(READ WRITE DELETE);

Bitová pole Umožňují mnohem snadnější práci s bity a skupinami bitů Definice bitového pole odpovídá strukturovanému typu typedef struct { unsigned den : 5; unsigned mesic : 4; unsigned rok : 7; } DATUM; Položky ale mohou být pouze celočíselné (unsigned/signed) Číslo za dvojtečkou udává počet bitů pro danou položku Rozsah hodnot jednotlivých položek je 0 až 2 počet bitů 1 Pro uložení znaménka je potřeba 1 bit navíc Velikost celého bitového pole bývá omezena na velikost typu int

Práce s bitovým polem S bitovým polem lze pracovat podobně jako se strukturou Pouze nelze pracovat s adresami jednotlivých položek Vytvoření proměnné (s inicializací) DATUM dnes = { 23, 4, 2008-1980 }; DATUM zitra = dnes; Přístup k položkám zitra.den++; dnes.mesic = 6; dnes.rok = 2009-1980; if (dnes.rok!= d.rok)... printf("%u. %u. %u\n", d.den, d.mesic, d.rok + 1980);

Další nesouvisející drobnosti

Konstantní proměnné Vytváříme pomocí modifikátoru const const static double pi = 3.14159; const max = 100; // implicitni typ int Takto vytvořená konstanta má daný typ a rozsah platnosti Konstantní ukazatel vs. ukazatel na konstantní hodnotu const char *t1 = "Pointer na const znaky"; char text[] = "Const pointer na znaky"; char *const t2 = text; const char *const t3 = "Const pointer na const znaky";

Generátor pseudonáhodných čísel Inicializace generátoru pomocí void srand(unsigned int seed); // v stdlib.h Jako parametr seed se při inicializaci často používá time_t time(time_t *out); // v time.h Funkce vrací počet sekund od 1. ledna 1970 do svého volání Generování čísel pomocí int rand(); // v stdlib.h Funkce vrací číslo od 0 do konstanty RAND_MAX ze stdlib.h Generování čísel v jiném rozsahu (od min do max včetně) cislo = rand() % (max + 1 - min) + min; Příklad int pole[20]; srand((unsigned int)time(null)); for (int i = 0; i<20; i++) pole[i] = rand() % 10 + 1; // od 1 do 10

Pokročilé možnosti ukončení programu Všechny zde zmíněné funkce jsou deklarovány v stdlib.h Standardní ukončení programu void exit(int kod); Korektně uzavře soubory, smaže dočasné soubory, volá funkce registrované pomocí atexit Parametr kod odpovídá návratové hodnotě programu (funkce main) Registrace ukončovacích funkcí int atexit(void(*funkce)()); Postupně se spustí při standardním ukončení programu Nestandardní ukončení programu void abort(); Rychlé ukončení programu Nezapisuje buffery, nemaže dočasné soubory, nevolá funkce registrované pomocí atexit

Charakteristiky datových typů Pro snadnou a bezproblémovou přenositelnost programů Existují symbolické konstanty popisující všechny datové typy Definovány jsou Ve float.h pro reálné typy V limits.h pro celočíselné typy Jména konstant jsou intuitivní, definice jsou navíc opatřeny komentáři Celočíselné (např. typ int) INT_MAX maximální hodnota INT_MIN minimální hodnota, Reálné typy (např. typ double) DBL_MIN, DBL_MAX minimum a maximum (jako u celočíselných) DBL_DIG počet platných číslic DBL_EPSILON nejmenší rozlišitelný přírůstek k číslu 1.0 A další...

Práce se znaky Makra pro práci se znaky jsou definována v ctype.h Názvy maker jsou opět intuitivní isalpha, isalnum, isdigit, isxdigit, islower, isupper, isprint, ispunct, isgraph, isspace, iscntrl, tolower, toupper Příklad použití: int c, i; int pismena[26]; FILE *fr = fopen("text.txt", "r"); for (i = 0; i<26; i++) pismena[i] = 0; while ((c = getc(fr))!= EOF){ if (isalpha(c)) { if (islower(c)) c = toupper(c); pismena[c - 'A']++; } }