This is an old revision of the document!


Tipuri de date. Operatori. Masurarea timpului de executie. Functii matematice.

Obiective

În urma parcurgerii acestui laborator studentul va fi capabil să:

  • utilizeze în cadrul programelor variabile declarate cu tipurile standard de date
  • înțeleagă și utilizeze operatorii limbajului
  • măsoare timpul de execuție al programelor scrise
  • utilizeze funcțiile matematice din C

Noţiuni teoretice

Tipuri fundamentale de date

Tipurile de date reprezintă tipul de informație care poate fi stocat într-o variabilă. Un tip de data definește atât gama de valori pe care o poate lua o variabilă de un anume tip cât și operațiile care se pot efectua asupra ei. În continuare sunt prezentate tipurile fundamentale ale limbajului C, împreună cu o scurtă descriere a acestora:

  • char - reprezentat printr-un număr pe 8 biți (un byte), stochează un caracter, definit în C printr-un număr în intervalul [-128; +127]. De observat că valorile pozitive codifică caracterele standard ASCII
  • int - stochează numere întregi. Lungimea sa (și implicit plaja de valori) este dependentă de compilator si sistemul de operare considerat. De obicei, pe Linux, int se reprezintă pe 32 de biți (deci 4 bytes). În acest caz, poate memora numere între –2.147.483.648 și 2.147.483.647
  • float - reprezintă un număr real stocat în virgulă mobilă, simplă precizie (7 cifre), în gama de valori 3.4E +/- 38(reprezentat pe 4 bytes)
  • double - reprezinta un număr real stocat în virgulă mobilă, dublă precizie (15 cifre), în gama de valori 1.7E +/- 308 (reprezentat pe 8 bytes)

Acestor tipuri fundamentale li se mai pot adăuga un număr de calificatori, după cum urmează:

  • short - aplicabil doar pentru int, rezultând, de obicei, un întreg pe 2 octeți
  • long - aplicabil doar pentru int. Rezultă un întreg pe 32 de biți (4 octeți), schimbare semnificativa doar pentru Windows)
  • unsigned - precizează faptul că valoarea variabilei este pozitivă. Aplicabil doar tipurilor întregi

În cazul în care este absolut necesar ca tipul întreg să aibă o anumită lungime (ca în cazul lucrului cu structuri, care va fi discutat într-un laborator viitor), este indicată consultarea cu atenție a documentației compilatorului. Compilatorul GCC pune în acest sens la dispoziția programatorului, următoarele tipuri de întregi cu lungime clar specificată: uint_8, uint_16, uint_32, uint_64 - pentru întregi fară semn pe 8, 16, 32 respectiv 64 de biți int_8, int_16, int_32, int_64 - pentru întregi cu semn reprezentați pe 8, 16, 32 respectiv 64 de biți.

Determinarea corectă a tipurilor de date care vor fi folosite este esențială pentru securitatea și buna funcționare a aplicațiilor pe care le scrieți. În cazul în care valoarea conținută de o variabilă depașește limitele impuse de tipul de date folosit, se produce așa-numit-ul over-flow care poate cauza erori aparent inexplicabile. (Ca o anecdotă, în fiecare an (până acum trei sau patru ani), Bill Gates primea de la FISC o scrisoare prin care era somat să iși platească taxele, deoarece apărea in evidențele lor ca având datorii însemnate. Asta deoarece valoarea averii lui (mult peste 4.000.000.000$) producea un overflow în softul folosit de către FISC. În final situația a fost soluționată, introducând un câmp special pentru el în softul folosit. (A modifica softul peste tot ar fi introdus un plus de stocare nejustificat pentru fiecare din cei aproximativ 300.000.000 de cetațeni ai SUA.) )

Operatori

Operatorii limbajului C pot fi unari, binari sau ternari, fiecare având o precedenţă şi o asociativitate bine definite. Tabelul următor sintetizează operatorii limbajului C. Operatorii sunt prezentaţi în ordine descrescătoare a priorităţii.

Precedenţă Operator Descriere Asociativitate
1 [] Indexare stanga-dreapta
. şi -> Selecţie membru (prin structură, respectiv pointer) stânga-dreapta
++ şi -- Postincrementare/postdecrementare stânga-dreapta
2 ! Negare logică dreapta-stânga
~ Complement faţă de 1 pe biţi dreapta-stânga
++ şi -- Preincrementare/predecrementare dreapta-stânga
+ şi - + şi - unari dreapta-stânga
* Dereferenţiere dreapta-stânga
& Operator adresă dreapta-stânga
(tip) Conversie de tip dreapta-stânga
sizeof() Mărimea în octeţi dreapta-stânga
3 * Înmulţire stânga-dreapta
| Împărţire | stânga-dreapta | | ::: | % | Restul împărţirii | stânga-dreapta | | 4 | + şi - | Adunare/scădere | stânga-dreapta | | 5 | << si >> | Deplasare stânga/dreapta a biţilor | stânga-dreapta | | 6 | < | Mai mic | stânga-dreapta | | ::: | <= | Mai mic sau egal | stânga-dreapta | | ::: | > | Mai mare | stânga-dreapta | | ::: | >= | Mai mare sau egal | stânga-dreapta | | 7 | == | Egal | stânga-dreapta | | ::: | != | Diferit | stânga-dreapta | | 8 | & | ŞI pe biţi | stânga-dreapta | | 9 | | SAU-EXCLUSIV pe biţi | stânga-dreapta | | 10 | | SAU pe biţi | stânga-dreapta | | 11 | && | ŞI logic | stânga-dreapta | | 12 | | SAU logic | stânga-dreapta | | 13 | :? | Operator condiţional | dreapta-stânga | | 14 | = | Atribuire | dreapta-stânga | | ::: | += şi -= | Atribuire cu adunare/scădere | dreapta-stânga | | ::: | *= şi /= | Atribuire cu multiplicare/împărţire | dreapta-stânga | | ::: | %= | Atribuire cu modulo | dreapta-stânga | | ::: | &= si = | Atribuire cu ŞI/SAU | dreapta-stânga | | ::: |
programare-ca/laboratoare/lab02.1349023152.txt.gz · Last modified: 2012/09/30 19:39 by emil.racec
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0