Operatori in c

0
82
Operatori in c
Ti-a placut acest articol? Acorda-i o nota

Operatori

 

Operatori aritmetici

 

Operatori aritmetici unari sunt + şi -. Operatorul – se foloseşte pentru a schimba semnul unei expresii aritmetice. Operatorul + se foloseşte pentru a da claritate codului, el neschimbând semnificaţia expresiei.

 

+ Nu modifică expresia, doar face explicit semnul ei.

+10 se evaluează la 10

+ – 8.4 se evaluează la -8.4

Inversează semnul expresiei

-10 se evaluează la -10

– – 8.4 se evaluează la 8.4

 

Operatorii aritmetici binari sunt +, -, *, / şi %.

 

* Înmulţire.

3 * 10 se evaluează la 30

-2 * 7 se evaluează la -14

1.5 * 2.7 se evaluează la 4.05

/ Împărţire. Împărţirea întreagă se realizează prin trunchiere.

10 / 3 se evaluează la 3

11 / 3 se evaluează la 3

-10 / 3 se evaluează la -3

10.0 / 3 se evaluează la 3.333333

% Restul împărţirii întregi. Se aplică doar la operatori de tipuri întregi.

10 % 3 se evaluează la 1

11 % 3 se evaluează la 2

-10 % 3 se evaluează la -1

+ Adunare.

3 + 10 se evaluează la 13

-2 + 7 se evaluează la 5

1.5 + 2.7 se evaluează la 4.2

Scădere.

3 – 10 se evaluează la -7

-2 – 7 se evaluează la -9

1.5 – 2.7 se evaluează la -1.2

 

 

Operatori relaţionali şi logici

 

Operatorii relaţionali sunt <, <=, > şi >=.

 

< Returnează 1 dacă primul operand este strict mai mic decât al doilea, 0 altfel.

2 < 3 se evaluează la 1

3 < 3 se evaluează la 0

4 < 3 se evaluează la 0

<= Returnează 1 dacă primul operand este mai mic sau egal cu al doilea, 0 altfel.

2 <= 3 se evaluează la 1

3 <= 3 se evaluează la 1

4 <= 3 se evaluează la 0

> Returnează 1 dacă primul operand este strict mai mare decât al doilea, 0 altfel.

2 > 3 se evaluează la 0

3 > 3 se evaluează la 0

4 > 3 se evaluează la 1

>= Returnează 1 dacă primul operand este mai mare sau egal cu al doilea, 0 altfel.

2 >= 3 se evaluează la 0

3 >= 3 se evaluează la 1

4 >= 3 se evaluează la 1

 

Operatorii de egalitate sunt == şi !=.

 

== Returnează 1 dacă primul operand este egal cu al doilea, 0 altfel.

2 == 3 se evaluează la 0

3 == 3 se evaluează la 1

4 == 3 se evaluează la 0

!= Returnează 1 dacă primul operand este diferit de al doilea, 0 altfel.

2 != 3 se evaluează la 1

3 != 3 se evaluează la 0

4 != 3 se evaluează la 1

 

Operatorii logici binari sunt && şi ||. Operatorul logic unar este !. În limbajul C nu există un tip de date dedicat pentru valori logice (adevărat şi fals). Pentru valori logice se folosesc tipurile întregi, cu următoarea convenţie:

  • Numărul 0 reprezintă fals;
  • Orice număr diferit de 0 reprezintă adevărat.

 

&& Returnează 1 dacă ambii operanzi sunt adevărat, 0 altfel.

-2 && 2 se evaluează la 1

-2 && 0 se evaluează la 0

0 && 2 se evaluează la 0

0 && 0 se evaluează la 0

|| Returnează 1 dacă cel puţin un operand este adevărat, 0 altfel.

-2 && 2 se evaluează la 1

-2 && 0 se evaluează la 1

0 && 2 se evaluează la 1

0 && 0 se evaluează la 0

! Returnează 1 dacă operandul este fals, 0 altfel.

! -2 se evaluează la 0

! 2 se evaluează la 0

! 0 se evaluează la 1

 

 

Operatorii de incrementare şi decrementare

 

Limbajul C pune la dispoziţie doi operatori pentru incrementarea, respectiv decrementarea variabilelor de tipuri întregi. Operatorii sunt ++, respectiv –. Sunt operatori unari şi se pot aplica înaintea operandului (prefix) sau după operand (postfix).

 

++ prefix Incrementează valoarea variabilei, după care returnează valoarea de după incrementare.

 

int n = 10;

printf(„%d „, ++n);

printf(„%d”, n);

 

afişează

 

11 11

++ postfix Returnează valoarea variabilei înainte de incrementare, după care incrementează variabila.

 

int n = 10;

printf(„%d „, n++);

printf(„%d”, n);

 

afişează

 

10 11

— prefix Decrementează valoarea variabilei, după care returnează valoarea de după decrementare.

 

int n = 10;

printf(„%d „, –n);

printf(„%d”, n);

 

afişează

 

9 9

— postfix Returnează valoarea variabilei înainte de decrementare, după care decrementează variabila.

 

int n = 10;

printf(„%d „, n–);

printf(„%d”, n);

 

afişează

 

10 9

 

 

Operatori pe biţi

 

Limbajul C pune la dispoziţie 6 operatori care acţionează pe biţi: &, |, ^, <<, >> şi ~.

 

& ŞI pe biţi.

 

Tabela de adevăr:

  0 1
0 0 0
1 0 1

 

341 & 204 se evaluează la 68

 

Reprezentările pe biţi sunt:

00000000000000000000000101010101 = 341

00000000000000000000000011001100 = 204

00000000000000000000000001000100 = 341 & 204 = 68

| SAU pe biţi.

 

Tabela de adevăr:

  0 1
0 0 1
1 1 1

 

341 | 204 se evaluează la 477

 

Reprezentările pe biţi sunt:

00000000000000000000000101010101 = 341

00000000000000000000000011001100 = 204

00000000000000000000000111011101 = 341 | 204 = 477

^ SAU EXCLUSIV pe biţi.

 

Tabela de adevăr:

  0 1
0 0 1
1 1 0

 

341 ^ 204 se evaluează la 409

 

Reprezentările pe biţi sunt:

00000000000000000000000101010101 = 341

00000000000000000000000011001100 = 204

00000000000000000000000110011001 = 341 ^ 204 = 409

<< Deplasare pe biţi spre stânga.

 

5 << 3 se evaluează la 40

 

Reprezentările pe biţi sunt:

00000000000000000000000000000101 = 5

00000000000000000000000000101000 = 5 << 3 = 40

>> Deplasare pe biţi spre dreapta.

 

110 >> 4 se evaluează la 6

 

Reprezentările pe biţi sunt:

00000000000000000000000001101110 = 110

00000000000000000000000000000110 = 110 >> 4 = 6

~ Negare pe biţi.

 

Tabela de adevăr:

  0
0 1
1 0

 

~204 se evaluează la -205

 

Reprezentările pe biţi sunt:

00000000000000000000000011001100 = 204

11111111111111111111111100110011 = ~204 = -205

 

 

Operatori de atribuire

 

Pe lângă operatorul de atribuire =, limbajul C pune la dispoziţie o serie de operatori de atribuire care sunt prescurtări pentru expresii de atribuire.

 

Spre exemplu în loc de să scriem

n = n + 10;

putem scrie

n += 10;

 

În general, în loc să scriem

variabila = variabila <operator> operand;

putem scrie

variabila <operator>= operand;

 

Lista completă a operatorilor de atribuire este: +=, -=, *=, /=, %=, <<=, >>=, &=, ^= şi |=.

 

 

Precedenţa operatorilor

 

Atunci când într-o expresie apar mai mulţi operatori, ordinea de evaluare a lor este dată de regulile de precedenţă. Operatorii care au o precedenţă mai mare vor fi evaluaţi primii. Tabelul următor prezintă nivelurile de precedenţă ale operatorilor. Operatorii cu precedenţa mai mare apar primii în tabel.

 

În afară de operatorii amintiţi mai sus, în tabel se regăsesc şi:

  • Operatorul de indexare în şiruri: []
  • Operatorul de dereferenţiere la structuri: ->
  • Operatorul de dereferenţiere la pointeri: *
  • Operatorul de conversie de tip: (tip)
  • Operatorul sizeof
  • Operatorul condiţional: ?:
  • Operatorul de secvenţiere: ,

 

În plus, în tabel este specificată ordinea de evaluare pentru operatorii care au aceeaşi precedenţă. Ordinea de evaluare poate fi de la stânga la dreapta sau de la dreapta la stânga.

 

 

 

Operatori Asociativitate
[] -> De la stânga la dreapta
! ~ ++ — + – * (tip) sizeof De la dreapta la stânga
* / % De la stânga la dreapta
+ – De la stânga la dreapta
<< >> De la stânga la dreapta
< <= > >= De la stânga la dreapta
== != De la stânga la dreapta
& De la stânga la dreapta
^ De la stânga la dreapta
| De la stânga la dreapta
&& De la stânga la dreapta
|| De la stânga la dreapta
?: De la dreapta la stânga
= += -= *= /= %= &= ^= |= <<= >>= De la dreapta la stânga
, De la stânga la dreapta

 

 

Probleme propuse

 

  1. Citiţi de la tastatură un an calendaristic şi afişaţi pe ecran textul „da” dacă anul citit este an bisect, respectiv textul „nu” dacă anul citit nu este bisect. Un an este bisect dacă se divide cu 4 şi nu se divide cu 100, cu excepţia anilor care se divid cu 400 care sunt bisecţi.
  2. O variabilă de tip char ocupă în memorie opt biţi. Aceşti opt biţi pot fi împărţiţi în două zone de câte patru biţi. În fiecare zonă de câte patru biţi s-ar putea memora câte un număr între 0 şi 15. Scrieţi un program care citeşte de la tastatură două numere între 1 şi 10 şi le memorează în cele două zone de câte patru biţi ale unei variabile de tip char. După memorare, programul citeşte valorile memorate şi le afişează pe ecran.
  3. Exerciţii cu evaluări de expresii la tablă.

 

NICIUN COMENTARIU

LĂSAȚI UN MESAJ