Limbaj de programare C6

download Limbaj de programare C6

of 20

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