Vrazy, dokonen Petr aloun katedra informatiky FEI VB-TU Ostrava 10. jna 2005 etr aloun (katedra informatiky FEI VB-TU Ostrava) Dal vrazy 10. jna 2005 1 / 25
vraz sloen z opertor a operand C++: kad opertor petit krom?:, ::,.,., sizeof, typeid, const cast, dynamic cast, reinterpret cast, static cast opertor V funkce V kontext, napklad << Piazujeme vsledek Pythagorova vta c = ヤ a 2 + b 2 c = s q r t ( aa + bb ) ; Petr aloun (katedra informatiky FEI VB-TU Ostrava) Dal vrazy 10. jna 2005 2 / 25
Opertor piazen i n t a, b, c ; a = b = c = 1; rvalue V r-hodnota, hodnotov vraz lvalue V l-hodnota, adresov vraz nejednoznan: cc = cc ++ 2; a [ i ] = i ++; etr aloun (katedra informatiky FEI VB-TU Ostrava) Dal vrazy 10. jna 2005 3 / 25
Aritmetick vrazy +,,, /, % 123 * 456 = 56088 295 / 2 = 147 295 % 2 = 1 nyni pozor: 20000 * 20001 = 400020000 400020000 * 10 = -294767296 etr aloun (katedra informatiky FEI VB-TU Ostrava) Dal vrazy 10. jna 2005 4 / 25
Aritmetick vrazy V vpis 1 #i n c l u d e < iostream > // v s t u p y a v y s t u p y #i n c l u d e <iomanip > // f o r m a t o v a n i vystupu u s i n g namespace s t d ; i n t main ( ) { i n t o1 = 123, o2 = 456, o3 = 295, v1, v2, v3 ; i n t c1 = 20000, c2 = 20001, vc ; v1 = o1 o2 ; v2 = o3 / 2 ; v3 = o3 % 2; cout << o1 < < ィ ィ < < o2 << ィ = ィ << setw (5) < < v1 < cout << o3 < < ィ / 2 = ィ << setw (5) < < v2 << e n d l ; cout << o3 << ィ % 2 = ィ << setw (5) < < v3 << e n d l ; etr aloun (katedra informatiky FEI VB-TU Ostrava) Dal vrazy 10. jna 2005 5 / 25
Aritmetick vrazy V vpis 2 vc = c1 c2 ; cout << e n d l << ィ n y n i pozor : ィ < < e n d l ; cout << setw (10) < < c1 < < ィ ィ < < setw (10) < < c2 << cout << setw (10) < < vc < < ィ ィ < < setw (10) < < 10 < < r e t u r n 0 ; } / / i n t main ( ) etr aloun (katedra informatiky FEI VB-TU Ostrava) Dal vrazy 10. jna 2005 6 / 25
smen aritmetick vrazy i n t main ( ) { i n t i, j ; double r, x ; j = i = 5 ; j = i ; r = j / 3 ; x = j 3 ; cout << ィ i = ィ << i << ィ j = ィ << j << ィ r = ィ << r << ィ x= ィ << x << e n d l ; r e t u r n 0 ; } / / i n t main ( ) i=5 j=25 r=8 x=75 Petr aloun (katedra informatiky FEI VB-TU Ostrava) Dal vrazy 10. jna 2005 7 / 25
Logick hodnoty a opertory C++ bool, true a false C cel sla 1, 0 &&,,! V konjunkce, disjunkce, negace A B!A A && B A B false false true false false false true true false true true false false false true true true false true true Relan opertory <, >, <=, >=, ==,!= men ne, vt ne, men nebo rovno, vt nebo rovno, rovno a nerovno Petr aloun (katedra informatiky FEI VB-TU Ostrava) Dal vrazy 10. jna 2005 8 / 25
Bitov opertory pouze s celoselnmi hodnotami <<, >>, &,,, ニル posun vlevo, posun vpravo, bitov konjunkce, bitov disjunkce, bitov negace, bitov nonekvivalence b1 b2 b1 b1 & b2 b1 b2 b1 ニル b2 0 0 1 0 0 0 0 1 1 0 1 1 1 0 0 0 1 1 1 1 0 1 1 0 Bitov posun, MSB, LSB V unsigned, celoseln dlen (nsoben) dvma, V aritmetick posun, znamnkov bit. Bitov konjunkce &, disjunkce, a nonekvivalence ニル (and, or, xor) provd pslunou binrn operaci s kadm prem odpovdajcch si bit celoselnch operand. Bitov negace je unrn, bitov doplnk. etr aloun (katedra informatiky FEI VB-TU Ostrava) Dal vrazy 10. jna 2005 9 / 25
ve 32bitovm prosted: 1 << 1 = 2 0x2 1 << 7 = 128 0x80-1 >> 1 = -1 0xffffffff 512 >> 8 = 2 0x2 13 & 6 = 4 0x4 13 6 = 15 0xf 13 ^ 6 = 11 0xb 2 & 1 = 0 0 2 1 = 3 0x3 2 ^ 1 = 3 0x3 Petr aloun (katedra informatiky FEI VB-TU Ostrava) Dal vrazy 10. jna 2005 10 / 25
op-bit01.cpp st 1 #i n c l u d e <iomanip > // f o r m a t o v a n i vystupu u s i n g namespace s t d ; i n t main ( ) { i n t v l e v o 1 = 1 < < 1; i n t v l e v o 7 = 1 < < 7; cout. s e t f ( i o s : : showbase ) ; / / ukaze z a k l a d c i s e l n e s o u cout << ィ 1 << 1 = ィ << dec << setw (6) < < v l e v o 1 << cout << ィ 1 << 7 = ィ << dec << setw (6) < < v l e v o 7 << cout << ィ 1 >> 1 = ィ << dec << setw (6) < < vpravo1 << cout << ィ512 >> 8 = ィ << dec << setw (6) < < vpravo8 << i n t vpravo1 = 1 >> 1; i n t vpravo8 = 512 > > 8; etr aloun (katedra informatiky FEI VB-TU Ostrava) Dal vrazy 10. jna 2005 11 / 25
op-bit01.cpp st 2 i n t k = 13 & 6; i n t d = 1 3 6 ; i n t non = 1 3 ニル 6 ; cout < < ィ 13 & 6 = ィ << dec << setw (6) < < k << hex < cout < < ィ 13 6 = ィ < < dec << setw (6) < < d << hex < cout < < ィ 13 ニル 6 = ィ < < dec << setw (6) < < non << hex k = 2 & 1; d = 2 1 ; non = 2 ニル 1 ; cout << ィ 2 & 1 = ィ << dec << setw (6) < < k << hex < cout << ィ 2 1 = ィ < < dec << setw (6) < < d << hex < cout << ィ 2 ニル 1 = ィ < < dec << setw (6) < < non << hex r e t u r n 0 ; etr aloun (katedra informatiky FEI VB-TU Ostrava) Dal vrazy 10. jna 2005 12 / 25
int-size.cpp #i n c l u d e < iostream > // v s t u p y a v y s t u p y u s i n g namespace s t d ; i n t main ( ) { u n s i g n e d i n t u i = 0 ; i n t i = 1 ; w h i l e ( u i >>= 1) i ++; cout << ィ p r e k l a d a c p o u z i v a ィ << i << ィ b i t o v o u r e p r e z e r e t u r n 0 ; } / / i n t main ( ) prekladac pouziva 32bitovou reprezentaci celeho cisla Petr aloun (katedra informatiky FEI VB-TU Ostrava) Dal vrazy 10. jna 2005 13 / 25
Adresov opertor & je unrn promenna i=123 je umistena od adresy: 0012FF7C #i n c l u d e < iostream > u s i n g namespace s t d ; i n t main ( ) { i n t i = 123, p i ; p i = & i ; cout << ィpromenna i = ィ << i << ィ j e umistena od a d r e s y r e t u r n 0 ; } / / i n t main ( ) Petr aloun (katedra informatiky FEI VB-TU Ostrava) Dal vrazy 10. jna 2005 14 / 25
Reference V odkaz synonymum, alias i n t i = 0; // c e l o c i s e l n a promenna i n t & o i = i ; / / o i j e v y t v o r e n o j a k o odkaz na i o i = 2 ; / / u m i s t i 2 do promenne i ( p r e s odkaz o i Opertor rka postupn vyhodnocen, nejni priorita, zleva doprava. etr aloun (katedra informatiky FEI VB-TU Ostrava) Dal vrazy 10. jna 2005 15 / 25
Petypovn vrazu (typ), const cast, static cast, dynamic cast, (typ) vyraz r = j / 3; r = (double) j / 3; reinterpret cast etr aloun (katedra informatiky FEI VB-TU Ostrava) Dal vrazy 10. jna 2005 16 / 25
Zadej cele cislo: 123 Petr aloun abs(123) (katedra informatiky = FEI 123VB-TU Ostrava) Dal vrazy 10. jna 2005 17 / 25 Podmnn opertor, op-cond.cpp ternrn #i n c l u d e < iostream > u s i n g namespace s t d ; i n t main ( ) { i n t i, a b s i ; cout << e n d l << ィ Zadej c e l e c i s l o : ィ ; c i n >> i ; a b s i = ( i < 0)? i : i ; cout << ィ abs ( ィ << i << ィ) = ィ << a b s i << e n d l ; r e t u r n 0 ; } / / i n t main ( )
Sprva pamti, new-del.cpp st 1 C++ new a delete. new alokuje objekt V kostruktor #i n c l u d e < iostream > u s i n g namespace s t d ; i n t main ( ) { i n t p t r = new i n t ( 3 ) ; p t r += 7; cout << ィ p t r = ィ << p t r << e n d l ; d e l e t e p t r ; etr aloun (katedra informatiky FEI VB-TU Ostrava) Dal vrazy 10. jna 2005 18 / 25
Sprva pamti, new-del.cpp st 2 i n t pocet ; cout << ィ K o l i k a p r v k o v e p o l e c h c e s v y t v o r i t? : ィ ; c i n >> pocet ; double p o l e = new double [ pocet ] ; i n t i = 0 ; w h i l e ( i < pocet ) { p o l e [ i ] = i + ( double ) i / 1 0 0 ; cout << p o l e [ i ] << e n d l ; i ++; } / / w h i l e ( i < pocet ) d e l e t e [ ] p o l e ; r e t u r n 0 ; } / / i n t main ( ) etr aloun (katedra informatiky FEI VB-TU Ostrava) Dal vrazy 10. jna 2005 19 / 25
Sprva pamti, new-del.cpp vstup *ptr = 10 Kolikaprvkove pole chces vytvorit?:5 0 1.01 2.02 3.03 4.04 Petr aloun (katedra informatiky FEI VB-TU Ostrava) Dal vrazy 10. jna 2005 20 / 25
Vrazov pkaz, pkaz vraz ukonen ; Przdn pkaz ; Blok skupina pkaz mezi { a } sloen pkaz lokln deklarace a definice, lokln promnn, pamt ヲov tda auto etr aloun (katedra informatiky FEI VB-TU Ostrava) Dal vrazy 10. jna 2005 21 / 25
Oblast platnosti identifiktoru Na rovni souboru zan platnost deklarace mstem deklarace a kon na konci souboru. Deklarace na rovni argumentu funkce m rozsah od msta deklarace argumentu v rmci definice funkce a do ukonen vnjho bloku definice funkce. Pokud se nejedn o definici funkce, kon rozsah deklarace argumentu s deklarac funkce. V rmci bloku je deklarace platn do konce bloku. etr aloun (katedra informatiky FEI VB-TU Ostrava) Dal vrazy 10. jna 2005 22 / 25
Prostor jmen e problmy s ppadnm konfliktem v oblasti identifiktor. using namespace std; vlastn: namespace identifikator seznam deklaraci opertor tyteka :: prostor jmen::identifikator etr aloun (katedra informatiky FEI VB-TU Ostrava) Dal vrazy 10. jna 2005 23 / 25
scope-jmena.cpp c o n s t char i d = ィ soubor scope jmena. cpp ィ ; // g l o b l n k o n s t a n t a namespace C P P p r o z e l e n a c e { c o n s t char i d = ィ Saloun. C++ pro z e l e n a c e. ィ ; // k o n s t a n t a ve jmennm p r o s t o r u C P P p r o z e l e n a c e } i n t main ( ) { c o n s t char i d = ィ t e l o f u n k c e main ィ ; // l o k l n k o n s t a n t a ve f u n k c i main ( ) s t d : : cout << i d << s t d : : e n d l ; / / l o k l n s t d : : cout < < :: i d << s t d : : e n d l ; / / g l o b l n s t d : : cout << ィDobra k n i h a : ィ < < C P P p r o z e l e n a c e : : i d << s t d : : e n d l ; r e t u r n 0 ; Petr aloun (katedra informatiky FEI VB-TU Ostrava) Dal vrazy 10. jna 2005 24 / 25
scope-jmena.cpp vstup telo funkce main soubor scope_jmena.cpp Dobra kniha: Saloun. C++ pro zelenace. Petr aloun (katedra informatiky FEI VB-TU Ostrava) Dal vrazy 10. jna 2005 25 / 25