Limbaj de programare C6
Transcript of Limbaj de programare C6
-
7/31/2019 Limbaj de programare C6
1/20
Limbaje de programare
Cursul VI
Limbaje de programare Conf.dr. L. STOLERIU [email protected]
-
7/31/2019 Limbaj de programare C6
2/20
Conversia la ntre
, , n orice expresie unde pot fi folositeint sau unsignedint . Dac toate valorile ti ului ori inal ot fi re rezentatede un int , atunci valoarea acesteia se va converti laint ;
altfel se va converti la unsigned int . Aceasta senume e convers e a n reg .
2 Limbaje de programare Conf.dr. L. STOLERIU [email protected]
-
7/31/2019 Limbaj de programare C6
3/20
Conversii aritmetice uzuale
Conversiile aritmetice pot apare cnd sunt evaluai
Presupunem c i este int i f este un float . n expresiai+f , i se converte te la float iari+f va ntoarce ti ulfloat .
3 Limbaje de programare Conf.dr. L. STOLERIU [email protected]
-
7/31/2019 Limbaj de programare C6
4/20
Conversii aritmetice uzuale dac un operand long double > cellalt convertit lalong doublealtfel, dac un operanddouble > cellalt convertit ladoublea e , ac un operan oa > ce a conver a oaaltfel/***** au loc conversiile la intreg *****/
> altfel, dac un operandlong I cellalt unsigned atunci
> daclong ine toate valorile unsigned> unsigned devine long
> daclong nu ine toate valorileunsigned> ambii devinunsigned long
altfel, dac un operandlong > cellalt convertit lalong
a t e , ac un operan uns gne > ce a t convert t auns gnealtfelambii operanzi vor avea tipulint
4 Limbaje de programare Conf.dr. L. STOLERIU [email protected]
-
7/31/2019 Limbaj de programare C6
5/20
Conversii ex licite Dac iint , atunci
va converti valoarea lui i astfel nct expresia s aib tipuldouble . Variabila i rmne neschimbat.
(long) ('A' + 1.0)
x = (float) ((int) y + 1)(double) (x = 77)
Operatorul de conversie de tip (cast ) este operator unar
stanga) ca operatorii unari.(float) i+3 este echivalent cu((float) i)+3
5 Limbaje de programare Conf.dr. L. STOLERIU [email protected]
-
7/31/2019 Limbaj de programare C6
6/20
Ti uri enumeratePentru declararea tipurilor enumerate se folosete cuvntul
.enumerarea elementelor ca elemente ale mulimii.enum zile {luni, marti, miercuri, joi, vineri, sambata, duminica};
Aceast declaraie creeaz tipul utilizator enum zile .Enumeratorii (sau elementele) sunt identificatoriiluni,marti,... . Acestea sunt constanteint . Prin convenie,primul este 0, i apoi restul sunt incrementai.
Declararea variabilelor de tipenum zile :enum z e z , z ;
Variabilele zi1 i zi2 pot fi folosite de exemplu ca:=
6 Limbaje de programare Conf.dr. L. STOLERIU [email protected]
-
7/31/2019 Limbaj de programare C6
7/20
Ti uri enumerate
enum carti {trefla = 1, caro, frunza, inima} a, b, c;
Din moment cetrefla este iniializat cu 1, rezultcaro ,frunza i inima iniializate cu 2, 3, 4.
enum fructe {mere = 7, pere, portocale = 3, lamai} nr_frct;
pere va fi iniializat cu 8, iarlamai cu 4.ume e pu u enumerare poa e ps , ns a unc nu maputem declara alte variabile de acel tip.
enum {plop, molid, brad} copaci;Singura variabil de tipenum {plop, molid, brad}este co aci nu se mai oate declara alta .
7 Limbaje de programare Conf.dr. L. STOLERIU [email protected]
-
7/31/2019 Limbaj de programare C6
8/20
t edef C pune la dispoziie facilitateatypedef pentru
.typedef int culoare;culoare rosu, verde, albastru;
Acesta definete tipulculoare ca fiind un sinonim al luiint . Apoi declarm trei variabile de tipulculoare .
Util pentru a crete lizibilitatea programului.
8 Limbaje de programare Conf.dr. L. STOLERIU [email protected]
-
7/31/2019 Limbaj de programare C6
9/20
t edef Se pot folosi i casturi pentru variabilele definite cut edef .
De exemplu:
enum zile {duminica, luni, marti, miercuri,joi, vineri, sambata};
t edef enum zile zi;zi o_func ie(zi z) Ce face aceast
return ((zi)(((int) z + 1) % 7));}
func ie?
9 Limbaje de programare Conf.dr. L. STOLERIU [email protected]
-
7/31/2019 Limbaj de programare C6
10/20
Ex resii i o eratori e bi i Operatorii pe bii lucreaz cu expresiintregi reprezentateca iruri de cifre binare.
Complement pe bit (unar) ~Si pe bit &Sau exclusiv pe bit ^Sau inclusiv e bitDeplasare stnga >
Operatorul ~ este unar, restul operatorilor sunt binari si
10 Limbaje de programare Conf.dr. L. STOLERIU [email protected]
-
7/31/2019 Limbaj de programare C6
11/20
~
Operatorul ~ se numete operator de complement (sauo erator de com lement e bit . Acesta inverseaz
reprezentarea irului pe bii, adic 0 devine 1 i 1 devine 0.short a = 5171;
Reprezentarea binar a lui a este:00010100 00110011
Expresia ~a este:11101011 11001100
Adic:- 5172 sau 60364
11 Limbaje de programare Conf.dr. L. STOLERIU [email protected]
-
7/31/2019 Limbaj de programare C6
12/20
Com lementului fa de doi Reprezentarea complementului fata de doi a unui numr
scrierii lui n n baza 2. Complementul pe bii al lui n la careadunam 1, d complementului fa de doi a lui n.O main care utilizeaz reprezentarea complementului
fa de doi ca reprezentare binar n memorie pentru valorin egra e se nume e ma n comp emen a e o .Operaia a b este aceeai cu a + (b), unde b se obine
.
12 Limbaje de programare Conf.dr. L. STOLERIU [email protected]
-
7/31/2019 Limbaj de programare C6
13/20
O eratori lo ici e bi i Cei trei operatori & (i), ^ (sau exclusiv) i | (sau inclusiv)
. .
a b a & b a ^ b a | b
0 0 0 0 0
1 0 0 1 1
0 1 0 1 1
1 1 1 0 1
13 Limbaje de programare Conf.dr. L. STOLERIU [email protected]
-
7/31/2019 Limbaj de programare C6
14/20
O eratori lo ici e bi i short a = 3333, b = 7777;
Ex p r esi e Rep r ezen t a r e Valo ar e
a 0000 11 0 1 00000 1 0 1 3333
b 000 1111 0 0 11 0000 1 7777
a & b 0000 11 00 0000000 1 3073a ^ b 000 1 00 11 0 11 00 1 00 4964
a | b 000 11111 0 11 00 1 0 1 8037
~(a | b) 11100000 10011010 -8038
(~a & ~b) 11100000 10011010 -8038
14 Limbaje de programare Conf.dr. L. STOLERIU [email protected]
-
7/31/2019 Limbaj de programare C6
15/20
O eratori de de lasare Cei doi operanzi ai unui operator de deplasare trebuie s fie
.operandul din stnga.
expresie1
-
7/31/2019 Limbaj de programare C6
16/20
O eratori de de lasare Chiar dac valoarea lui "c" se memoreaz pe un octet, ntro
.
Deci valoarea expresiilorc
-
7/31/2019 Limbaj de programare C6
17/20
O eratori de de lasare Operatorul de deplasare la dreapta >> nu este chiar
. ,
stnga se va completa cu 0, iar pentru cele cu semn se vacompleta cu 1!short a = 1 3 11110000 00000000 -4096b 10000000 00000000 32768
17
Limbaje de programare Conf.dr. L. STOLERIU [email protected]
-
7/31/2019 Limbaj de programare C6
18/20
M tiO masc este o constant folosit pentru extragerea biilordori i dintro alt variabil sau ex resie.
Din moment ceint 1 este:00000000 00000001poate fi folosit pentru determinarea bitului cel mai
nesemnificativ:=
for (i = 0; i < 10; i++)printf("%d \n", i & masca);
Dac dorim s gsim valoarea unui anume bit dintro expresie, putem folosi un ir binar ce are 1 n aceaozi ie i 0 n rest.
18 Limbaje de programare Conf.dr. L. STOLERIU [email protected]
-
7/31/2019 Limbaj de programare C6
19/20
M tiPutem folosi 1 3) ? 1 : 0are valoarea 1 sau 0 dup cum este al bitul 5 dinv .Alt exemplu de masc este constanta 255
00000000 11111111
v & 255va ntoarce o valoare ce are ca reprezentare pe bii toi biii
din byteul din stnga 0 i cel din dreapta identic cu octetuldin dreapta a lui v . Spunem c255 este masc pentru
19 Limbaje de programare Conf.dr. L. STOLERIU [email protected]
-
7/31/2019 Limbaj de programare C6
20/20
Litere mari litere mici #include #include #include void main(void)
{int c;while ((c = getchar()) != EOF)
{if (isupper(c)) // sau (c>='A' && c