# Prioritatea operatorilor și evaluarea expresiilor

> Pagina: https://bacalaurescu.ro/informatica/lectii/operatori-si-expresii/prioritatea-operatorilor
> Markdown: https://bacalaurescu.ro/informatica/lectii/operatori-si-expresii/prioritatea-operatorilor.md
> Sursa: Bacalaurescu (bacalaurescu.ro), conținut gratuit pentru BAC 2027.

Materia: [Informatică](https://bacalaurescu.ro/informatica)

Capitolul: [Operatori și expresii](https://bacalaurescu.ro/informatica/lectii/operatori-si-expresii)
Actualizat: 2026-11-01

Ordinea operațiilor în C++, capcanele cu împărțirea întreagă și exerciții de evaluare.

## Pe scurt pentru BAC

- Ordinea: paranteze, operatori unari, `*` `/` `%`, apoi `+` `-`, comparațiile, `&&`, `||`, iar atribuirea are prioritatea cea mai slabă.
- Operatorii de aceeași prioritate se evaluează de la stânga la dreapta, de aceea `10 - 4 - 3` dă 3, nu 9.
- `&&` și `||` evaluează operandul drept doar dacă e necesar, deci în `x != 0 && 10 / x > 2` împărțirea nu se execută la x = 0.
- În C++ orice valoare nenulă e adevărată, iar rezultatul unei comparații este 0 sau 1.
- La modulo cu negative, semnul restului urmează deîmpărțitul: `-7 % 2 = -1`, iar `7 % -2 = 1`.

## Ierarhia (de la prioritate mare la mică)

1. parantezele `( )`;
2. **unare**: `!`, `-` (minusul de semn), `++`, `--`;
3. `*`, `/`, `%` (aceeași prioritate, evaluate de la stânga la dreapta);
4. `+`, `-`;
5. comparațiile `<`, `<=`, `>`, `>=`, apoi `==`, `!=`;
6. `&&`, apoi `||`;
7. atribuirea `=` (cea mai slabă).

## Evaluare pas cu pas (tiparul de subiect I)

**1.** `2 + 3 * 4 % 5`
$\to$ `3*4 = 12` $\to$ `12 % 5 = 2` $\to$ `2 + 2 = ` **4**.

**2.** `7 / 2 * 2 + 7 % 2`
$\to$ `7/2 = 3` (întreg!) $\to$ `3*2 = 6`; `7%2 = 1` $\to$ **7**.

**3.** `10 - 4 - 3`
$\to$ stânga-dreapta: `6 - 3 = ` **3** (nu 9!).

**4.** `(1 + 2) * (10 % 4) - 6 / 4`
$\to$ `3 * 2 - 1 = ` **5**.

## Expresiile logice și scurtcircuitarea

`&&` și `||` evaluează operandul drept DOAR dacă e necesar:

1. `x != 0 && 10 / x > 2`: sigură (împărțirea nu se execută la x = 0);
2. în C++, orice valoare NENULĂ e "adevărat"; rezultatul comparațiilor e 0 sau 1.

**Exemplu.** Pentru x = 5: `x > 3 && x < 10` $\to$ `1 && 1 = 1`. Expresia `3 < x < 10` e o CAPCANĂ: se evaluează `(3 < x) < 10` $\to$ `1 < 10 = 1` mereu adevărat, indiferent de x!

## Modulo cu negative (detaliu de barem)

În C++, semnul restului urmează DEÎMPĂRȚITUL: `-7 % 2 = -1`, `7 % -2 = 1`.

> [!RETINE]
> Trio-ul care rezolvă majoritatea evaluărilor: 1) *, /, % înaintea lui +, −; 2) egală prioritate = stânga→dreapta; 3) împărțirea între întregi e ÎNTREAGĂ. Iar "a < b < c" NU testează intervalul.

## Greșeli frecvente

1. `7/2*2` este 6, nu 7: împărțirea întreagă lovește înainte de înmulțire.
2. Intervalele se scriu `a < x && x < b`, niciodată înlănțuit.
3. `%` are aceeași prioritate cu `*` și `/`: se evaluează în ordinea apariției.
