Sunteți pe pagina 1din 8

Laborator 1

Tipuri de date în C:
1)Numerice:
1.1) Întregi

int = număr pozitiv sau negativ reprezentat pe 4 octeți = 32 biți. Numerele ce pot fi reprezentate în acest
format se află în intervalul [−𝟐𝟑𝟏 , 𝟐𝟑𝟏 − 𝟏]. Pentru citirea sau afișare acestor numere se utilizează
specificatorul %d. Cel mai des folosit pentru numere întregi.

long long = număr pozitiv sau negativ reprezentat pe 8 octeți = 64 biți. Numerele care pot fi reprezentate
în acest format se află în intervalul [−𝟐𝟔𝟑 , 𝟐𝟔𝟑 − 𝟏]. Pentru citirea sau afișarea acestor numere se
utilizează specificatorul %lld

short int = număr pozitiv sau negativ reprezentat pe 2 octeți = 16 biți. Numerele care pot fi reprezentate
în acest format se află în intervalul [−𝟐𝟏𝟓 , 𝟐𝟏𝟓 − 𝟏]. Pentru citirea sau afișarea acestor numere se
utilizează specificatorul %hi

unsigned int = număr pozitiv reprezentat pe 4 octeți = 32 de biți. Numerele care pot fi reprezentate în
acest format se află în intervalul [𝟎, 𝟐𝟑𝟐 − 𝟏]. Pentru citirea sau afișarea acestor numere se utilizează
specificatorul %u

unsigned long long = număr pozitiv reprezentat pe 8 octeți = 64 de biți. Numerele care pot fi reprezentate
în acest format se află în intervalul [𝟎, 𝟐𝟔𝟒 − 𝟏]. Pentru citirea sau afișarea acestor numere se utilizează
specificatorul %llu

unsigned short int = număr pozitiv reprezentat pe 2 octeți = 16 de biți. Numerele care pot fi reprezentate
în acest format se află în intervalul [𝟎, 𝟐𝟏𝟔 − 𝟏]. Pentru citirea sau afișarea acestor numere se utilizează
specificatorul %hu

1.2)Reale

float = număr reprezentat pe 4 octeți = 32 biți. Specificatorul este %f

double = număr reprezentat pe 8 octeți = 64 biți. Specificatorul este %lf

2)Nenumerice
char = reprezintă un caracter (literă, cifră, caracter special, caracter neafișabil). Spațiul necesar este de 1
octet = 8 biți.
bool = o valoare binară Adevărat sau Fals (true, false). Spațiul necesar 1 octet = 8 biți.

Reprezentarea numerelor întregi în calculator


Conversia din baza 10 în baza 2
În sistemul de lucru al calculatorului nu pot exista decât 2 cifre 0 și 1, prin urmare orice număr trebuie să
fie reprezentat utilizandu-se doar aceste cifre. Pentru a trece un număr de baza 10, în care oamenii sunt
obișnuiți să lucreze, în baza 2 în care calculatorul este obișnuit să lucreze se utilizează următorul algoritm:
Se împarte numărul succesiv la 2 până când se obține valoare 0 care reprezintă testul de oprire. Resturile
acestor împărțiri se păstrează și se citesc în ordinea inversă obținerii lor.

Exemplu: Fie n=35 în baza 10, să se afle scrierea lui n în baza 2.

35 / 2 = 17 rest 1

17 / 2 = 8 rest 1

8 / 2 = 4 rest 0

4 / 2 = 2 rest 0

2 / 2 = 1 rest 0

1 / 2 = 0 rest 1

Numărul obținut este 100011 în baza 2. Înaintea unui număr natural se pot pune o infinitate de cifre de 0
și numărul va rămâne neschimbat din punct de vedere al valorii, astfel că dacă se dorește reprezentarea
numărului pe 16 biți corespunzători tipului de date unsigned short int atunci numărul va deveni
0000000000100011.

Ex1: Să se afle reprezentarea binară a numărului 167.

Ex2: Să se afle reprezentarea binară a numărului 115.

Conversia din baza 2 în baza 10


Se face prin înmulțiri repetate. Pentru fiecare cifră de 1 din reprezentarea binară se adună 2 la puterea
poziției cifrei în număr de la dreapta spre stânga, cu începerea numărătorii pozițiilor de la 0.

Exemplu: Să se afle reprezentarea zecimală a numărului binar n = 0000000000010110, n în baza 10 va fi


2' + 2( + 2) = 2 + 4 + 16 = 22

Ex3: Să se afle reprezentarea zecimală pt numărul 0000000001001100

Ex4: Să se afle reprezentarea zecimală pt numărul 0000000001011011


Reprezentarea numerelor negative
Se face în cod complement față de 2. Procesul de determinare a formei pe care numărul negativ o ia în
cadrul calculatorului are 3 pași:

1) Se determină reprezentarea numărului pozitiv în baza 2


2) Se modifică toți biți: 1 devine 0, iar 0 devine 1
3) La numărul obținut la pasul 2 se adună 1

Exemplu: Să se găsească reprezentarea internă a calculatorului pentru numărul -55.

Pasul 1)

55 / 2 = 27 rest 1

27 / 2 = 13 rest 1

13 / 2 = 6 rest 1

6 / 2 = 3 rest 0

3 / 2 = 1 rest 1

1 / 2 = 0 rest 1

55'* = 0000000000110111(

Pasul 2)

0000000000110111( → 1111111111001000

Pasul 3)

1111111111001000 + 1 = 1111111111001001 reprezentarea finală

Ex5: Să se găsească reprezentarea internă a calculatorului pentru numărul -98.

Ex6: Să se găsească reprezentarea internă a calculatorului pentru numărul -25.

Declararea variabilelor și operatorul de atribuire


Declararea se face după modelul tip_date nume_var_1, nume_var_2, nume_var_n;

Exemple:

int a, b, c;

float a;
char car;

long long var;

La declarare se pot atribui și valori pentru variabile prin utilizarea operatorului de asignare/atribuire =

Exemple:

int nr=10, val=-100;

float a=6.64, b=67.4;

Atribuirea se poate face și după declarare. Exemplu:

int nr;

nr=0;

double x;

x=10.6;

Operații pe biți
Și cu simbolul &, tabelul de adevăr:

& 1 0
1 1 0
0 0 0

Sau cu simbolul |, tabelul de adevăr:

| 1 0
1 1 1
0 1 0

Xor (sau exclusiv) cu simbolul ^, tabelul de adevăr:

^ 1 0
1 0 1
0 1 0
Negare cu simbolul ~, tabelul de adevăr:

~ 1 0
0 1

Se dau numerele binare 0000000001100101 și 0000000001001101 să se aplice cele 3 operații binare.

0000000001100101 & 0000000001100101 | 0000000001100101 ^


0000000001001101 0000000001001101 0000000001001101
0000000001000101 0000000001101101 0000000000101000

Ex7: Să se efectueze cele 3 operații pentru numerele 68 și 23.

Siftarea la stangă, cu simbolul <<, reprezintă o deplasare a biților spre stangă cu un nr de poziții, biții noi
care apar în dreapta numărului sunt 0, iar cei care depășesc formatul de reprezentare sunt eliminați.

Exemplu:

0000000001100101<<3 = 0000001100101000

Obs: Această siftare reprezintă de fapt o înmulțire a numărului cu 2+ = 8

Siftarea la dreapta, cu simbolul >>, reprezintă o deplasare a biților spre dreapta cu un nr de poziții, ultimii
biți sunt eliminați (cei din dreapta) iar în stangă se completează cu 0 pt numere întregi pozitive.

0000000001100101>>2 = 0000000000011001

Obs: Această siftare reprezintă de fapt o împărțire întreagă la 2( = 4

Ex8: Utilizând operațiile pe biți învățate până acum să se seteze valoare bitului de pe poziția 3 din numărul
35 cu valoare 1, indiferent de valaore lui curentă.

Ex9: Utilizând operațiile pe biți învățate până acum să se seteze valaorea bitului de pe poziția 4 din
numărul 55 cu valoarea 0, indiferent de valoarea lui curentă.

Citirea datelor de la tastatură


Se face în modul general astfel:

tip_date numr_var;

scanf(“%specificator”,&nume_var);

Exemplu:

int a;
scanf(“%d”,&a);

Se pot citi mai multe variabile în același timp.

Exemplu:

double var1, var2;

scanf(“%lf%lf”,&var1,&var2);

Afișarea datelor
Se face în mod general astfel:

tip_date nume_var = valoare;

printf(“O valoare de %specificator”,nume_var);

Exemplu:

float a = 4.5, b = 6.11;

printf(“a = %f si b = %f”,a,b);

Adăugarea de comentarii
Se face utilizând // dacă este un comentariu de un rând sau /* text comentariu /* dacă comentariul este
de mai multe rânduri. Scopul comentariilor este acela de a clarifica codul scris, de a oferi mai multe
informații și de a face codul mai ușor de înțeles. Comentariile nu afectează cu nimic execuția programului,
ele sunt ignorate de compilator. Comentariile sunt importante numai pentru om, nu și pentru calculator.

Exemplu:

int a=10,b=7,c;

//facem adunarea a doua numere

c=a+b;

printf(“Rezultatul lui c este %d”,c);

Operatori aritmetici
int a=10, b=6, c=-15, d=3, e=2, f=15, g=6, rez;

Adunarea a două valori:

rez=a+b;
a = a+b;
Echivalente
a +=b;

Scăderea a două valori

rez = b – c;

b = b – c;
Echivalente
b -= c;

Înmulțirea a două valori

rez = c * d;

c = c* d;
Echivalente
c *= d;

Împărțirea a două valori

rez = d / e;

d = d / e;
Echivalente
d /= e;

Restul împărțirii a două valori

rez = f%g

f = f%g
Echivalente
f %= g

Operatori de comparație
Au ca rezultat o valoare booleană, iar ca simboluri: ==, !=, >, >=, <, <=.

Exemplu:

int a=7,b=12;

a==b // is evaluated as false

a!=b // este evaluat ca true

a>=b // is evaluated as false


a<b // este evaluat ca true

a<=b // este evaluat ca true

S-ar putea să vă placă și