c_curs5_v3limbaj de programare c5

Upload: mykel

Post on 05-Apr-2018

218 views

Category:

Documents


0 download

TRANSCRIPT

  • 7/31/2019 C_curs5_v3Limbaj de programare C5

    1/15

    Limbaje deprogramare Conf.dr.L. STOLERIU [email protected]

    Cursul V

    Limbaje deprogramare

  • 7/31/2019 C_curs5_v3Limbaj de programare C5

    2/15

    Tipurifundamentalededate

    char signed char unsigned char

    short int long

    unsigned short unsigned unsigned long

    float double long double

    2 Limbaje deprogramare Conf.dr.L. STOLERIU [email protected]

  • 7/31/2019 C_curs5_v3Limbaj de programare C5

    3/15

    Tipurifundamentalededate

    0 1 1 0 0 0 0 1

    3

    Litera a" este memorat pe un octet astfel

    7 6 5 4 3 2 1 0

    Fiecare celul reprezint un bit i fiecare bit estenumerotat (ncepnd cu cel mai puin semnificativ). Biiicare formeaz un octet sunt fie "on", fie "off", aceste strifiind reprezentate prin 1 i 0.

    Astfel, variabila a" poate fi gndit ca irul de bii01100001 = 64 + 32 + 1 = 97

    0*27 + 1*26 + 1*25 + 0*24 + 0*23 + 0*22 + 0*21 + 1*20

    Limbaje deprogramare Conf.dr.L. STOLERIU [email protected]

  • 7/31/2019 C_curs5_v3Limbaj de programare C5

    4/15

    Tipurifundamentalededate

    De obicei, tipul char este echivalent cu unsigned char,se memoreaz pe un octet (deci poate ine 256 valori

    distincte). Pentru signed char, valorile sunt ntre 128i 127, iar pentru unsigned char ntre 0 i 255.

    4 Limbaje deprogramare Conf.dr.L. STOLERIU [email protected]

  • 7/31/2019 C_curs5_v3Limbaj de programare C5

    5/15

    int

    Tipul de date "int" este cel mai folosit tip din limbajul C.Acest tip, mpreun cu alte tipuri ntregi (cum ar fi: char,short i long) este desemnat pentru lucrul cu valori

    ntregi. n matematic, numerele naturale sunt 0, 1, 2, ..., care

    mpreun cu cele negative formeaz numerele ntregi. Pe omain, se pot reprezenta numai o submulime finit aacestor numere.

    De obicei, un int se memoreaz pe un cuvnt de main.

    PCurile reprezint cuvntul pe 16 bii (2 octei). MS Visual C are i tip de dat__int64 (int pe 8 octei)

    dar acest tip nu exist n alte compilatoare C.

    5 Limbaje deprogramare Conf.dr.L. STOLERIU [email protected]

  • 7/31/2019 C_curs5_v3Limbaj de programare C5

    6/15

    Semnulnumerelorntregi

    0 1 1 0 0 0 0 1

    6

    97 =

    n urma atribuirii valorii 97 la unsigned char x ichar y rezult la evaluare a=97 i b=97.

    225 =

    n urma atribuirii valorii 225 ctre unsigned char x

    i char y rezult:11100001 = 128 + 64 + 32 + 1 = 225(=x)11100001 = ?!?!?!?!?!?!?!?!?!?!? = -31(=y)

    1 1 1 0 0 0 0 1

    Limbaje deprogramare Conf.dr.L. STOLERIU [email protected]

  • 7/31/2019 C_curs5_v3Limbaj de programare C5

    7/15

    Semnulnumerelorntregi

    De unde 31? (31 scris n baza 2 este: 11111)

    Prin atribuirea lui 225 unei variabile care poate stocavalori ntre 128 i +127 are loc o depire(overflow).

    Exemplu de depire n baza 10:Presupunem c tim s stocm numai o cifr, Fie numrul 7

    3 este complementul lui 7 n baza 10 (cel mai mic numr care adunat la 7determin o depire trecerea la dou cifre)

    9+(-7)=2 la fel cum9+ 3 =2 (de fapt 9 + 3 = 12 dar cum nu putem stoca dect o cifr 1

    din 12 se pierde)

    7 Limbaje deprogramare Conf.dr.L. STOLERIU [email protected]

  • 7/31/2019 C_curs5_v3Limbaj de programare C5

    8/15

    Semnulnumerelorntregi

    n urma atribuirii valorii 225 ctre char a iunsigned char b rezult:

    11100001 = 128 + 64 + 32 + 1 = 225(=x)11100001 = ?!?!?!?!?!?!?!?!?!?!? = -31(=y)

    De unde 31? (31 scris n baza 2 este: 11111, nu seamn cunumrul de mai sus)

    . 225+31=256 (dar 256 este numrul maxim de valori ce pot fi stocate

    pe un byte=8 bii). Deci, 31 este complementul lui 225 n

    sistemul nostru de stocare. n cazul unui overflow primesc complementul

    numrului

    8 Limbaje deprogramare Conf.dr.L. STOLERIU [email protected]

  • 7/31/2019 C_curs5_v3Limbaj de programare C5

    9/15

    Semnulnumerelorntregi

    225 = Cum se gsete simplu complementul unui numr scris n

    baza 2 pe 8 bii: Se schimb toi biii 1 cu 0 i toi biii 0 cu 1.

    i se adun 1

    = 31

    Atenie! Complementul lui 31 este 225 numai la

    reprezentarea pe 8 bii (un byte). De exemplu, lareprezentarea numerelor ntregi pe 16 bii (2 bytes)complementul lui 31 este 65505.

    9

    1 1 1 0 0 0 0 1

    0 0 0 1 1 1 1 0

    0 0 0 1 1 1 1 1

    Limbaje deprogramare Conf.dr.L. STOLERIU [email protected]

  • 7/31/2019 C_curs5_v3Limbaj de programare C5

    10/15

    Numerereale virgul fix

    Exemplu:Convertim 46.25 n baza 2

    Convertim partea ntreag46 = 101110

    Convertim partea fracionar nmulindo repetat cu 2,extrgnd de fiecare dat partea ntreag a rezultatului0.25 * 2 = 0.5 (extragem drept bit 0)0.5 * 2 = 1.0 (extragem drept bit 1)

    46.25=101110.01

    Ne oprim cnd partea fracionar este 0 sau cnd seatinge precizia maxim a calculatorului (ca de exemplu

    n cazul numrului zecimal 1.1)10 Limbaje deprogramare Conf.dr.L. STOLERIU [email protected]

  • 7/31/2019 C_curs5_v3Limbaj de programare C5

    11/15

    Numerereale virgul mobil

    Reprezentarea n virgul fix poate descrie numerefoarte mari sau numere foarte mici numai cu o risip

    uria de memorie. Soluia virgula mobil (floating point)

    numr = mantisa * 10exponent

    3.14 = 0.314 * 101

    1999 = 0.1999 * 104

    101.0101 = 0.101010 * 23

    0.000111 = 0.111000 * 23

    11 Limbaje deprogramare Conf.dr.L. STOLERIU [email protected]

  • 7/31/2019 C_curs5_v3Limbaj de programare C5

    12/15

    Numerereale reprezentare

    Dac un float este reprezentat pe 32 bii: bitul 31 (cel mai semnificativ) este folosit pentru semn, mantisa ocup 23 bits dup semn (biii 308) 8 bii pentru exponent (biii 70) unul din biii exponentului ar trebui s stocheze semnul

    acestuia!

    Adunarea a dou numere floating point: Cele dou numere trebuie s aib acelai exponent Se egalizeaz exponenii modificnduse cel mai mic numr

    prin deplasarea punctului zecimal spre dreapta Se adun mantisele Se normalizeaz rezultatul n forma 0.xxx * 10xx

    12 Limbaje deprogramare Conf.dr.L. STOLERIU [email protected]

  • 7/31/2019 C_curs5_v3Limbaj de programare C5

    13/15

    sizeof();

    C pune la dispoziie operatorul sizeof() pentrudeterminarea numrului de octei necesari memorrii unui

    obiect. O expresie de forma

    sizeof(obiect)

    returneaz un ntreg. Un obiect poate fi un tip, cum ar fi intsau float, poate fi o expresie, cum ar fia+b, sau poate fi un ir sau o structur.

    13 Limbaje deprogramare Conf.dr.L. STOLERIU [email protected]

  • 7/31/2019 C_curs5_v3Limbaj de programare C5

    14/15

    sizeof();

    C este flexibil n ceea ce privete necesarul de memoriepentru tipurile fundamentale situaiile pot s difere de la

    o maina la alta. Totui, ntotdeauna:sizeof(char) = 1sizeof(short)

  • 7/31/2019 C_curs5_v3Limbaj de programare C5

    15/15

    Funciimatematice

    Nu exist funcii matematice implicite ci acestea suntdescrise n biblioteci. De exemplu, funciile

    sqrt() pow() exp() log()sin() cos() tan()

    sunt definite n biblioteca . Toate aceste funcii,

    cu excepia lui pow(), au un argument double ireturneaz double. Funcia pow() are dou argumentede tip double i returneaz double.

    15 Limbaje deprogramare Conf.dr.L. STOLERIU [email protected]