Capitolul 2.6. Operatori relationali si logici
:: Programare :: C & C++ :: Capitolul 2
Pagina 1 din 1
Capitolul 2.6. Operatori relationali si logici
Operatorii relationali sint > >= < <=. Ei au toti aceasi pondere. Sub ei in tabelul de ponderi se afla operatorii de egalitate == != , care au o aceeasi pondere. Operatorii relationali au ponderea mai mica decit cei aritmetici, asa ca expresii de tipul i < lim-1 se evalueaza ca i < (lim-1), asa cum ar fi de asteptat.
Mai interesanti sint conectorii logici && si ||. Expresiile care-i contin sint evaluate de la stinga la dreapta si evaluarea se opreste in clipa in care se cunoaste adevarul sau falsul rezultatului. Aceste proprietati se dovedesc critice in scrierea programelor. De exemplu iata o bucla luata din functia de intrare getline, pe care am scris-o in Capitolul 1:
for (i=0; i<lim-1 && (c = getchar()) != '\n' && c != EOF;++i)
s[i] = c;
In mod clar, inainte de a citi un nou caracter trebuie vazut daca mai exista loc pentru a-l depune in tabloul s , asa ca testul i<lim-1 trebuie facut in primul rind. Nu numai atit dar daca testul esueaza, nu trebuie sa mai citim un nou caracter.
Similar, ar fi nepotrivit sa testam daca c este EOF inainte de apelul lui getchar; apelul trebuie sa aiba loc inainte ca sa testam caracterul c.
Ponderea lui && este mai mare decit cea a lui || si amindoua sint mai mici decit cele ale operatorilor relationali si de egalitate, asa ca expresii de tipul
i<lim-1 && (c = getchar()) != '\n' && c != EOF
nu mai au nevoie de paranteze suplimentare. Dar, deoarece ponderea lui != este mai mare decit cea a asignarii, este nevoie de paranteze in
(c = getchar()) != '\n'
pentru a obtine rezultatul dorit.
Operatorul unar de negatie "!" converteste un operand nonzero sau adevarat in zero si un operand zero sau fals in 1. O utilizare obisnuita a lui ! este in constructii de tipul
if (!inword)
mai degraba decit
if (inword == 0)
Este mai greu sa generalizam care forma este mai buna. Constructiile de tipul !inword arata mai frumos ("daca nu e in cuvint"), dar constructiile mai complicate pot fi greu de inteles.
Exercitiul 2.1. Scrieti o bucla echivalenta cu bucla for de mai sus fara a folosi &&.
Mai interesanti sint conectorii logici && si ||. Expresiile care-i contin sint evaluate de la stinga la dreapta si evaluarea se opreste in clipa in care se cunoaste adevarul sau falsul rezultatului. Aceste proprietati se dovedesc critice in scrierea programelor. De exemplu iata o bucla luata din functia de intrare getline, pe care am scris-o in Capitolul 1:
for (i=0; i<lim-1 && (c = getchar()) != '\n' && c != EOF;++i)
s[i] = c;
In mod clar, inainte de a citi un nou caracter trebuie vazut daca mai exista loc pentru a-l depune in tabloul s , asa ca testul i<lim-1 trebuie facut in primul rind. Nu numai atit dar daca testul esueaza, nu trebuie sa mai citim un nou caracter.
Similar, ar fi nepotrivit sa testam daca c este EOF inainte de apelul lui getchar; apelul trebuie sa aiba loc inainte ca sa testam caracterul c.
Ponderea lui && este mai mare decit cea a lui || si amindoua sint mai mici decit cele ale operatorilor relationali si de egalitate, asa ca expresii de tipul
i<lim-1 && (c = getchar()) != '\n' && c != EOF
nu mai au nevoie de paranteze suplimentare. Dar, deoarece ponderea lui != este mai mare decit cea a asignarii, este nevoie de paranteze in
(c = getchar()) != '\n'
pentru a obtine rezultatul dorit.
Operatorul unar de negatie "!" converteste un operand nonzero sau adevarat in zero si un operand zero sau fals in 1. O utilizare obisnuita a lui ! este in constructii de tipul
if (!inword)
mai degraba decit
if (inword == 0)
Este mai greu sa generalizam care forma este mai buna. Constructiile de tipul !inword arata mai frumos ("daca nu e in cuvint"), dar constructiile mai complicate pot fi greu de inteles.
Exercitiul 2.1. Scrieti o bucla echivalenta cu bucla for de mai sus fara a folosi &&.
Subiecte similare
» Capitolul 2.9. Operatori logici pe biti
» Capitolul 2.5. Operatori Aritmetici
» Capitolul 2. TIPURI, OPERATORI SI EXPRESII
» Capitolul 2.8. Operatori de incrementare si decrementare
» Capitolul 2.10.Operatori si expresii de asignare
» Capitolul 2.5. Operatori Aritmetici
» Capitolul 2. TIPURI, OPERATORI SI EXPRESII
» Capitolul 2.8. Operatori de incrementare si decrementare
» Capitolul 2.10.Operatori si expresii de asignare
:: Programare :: C & C++ :: Capitolul 2
Pagina 1 din 1
Permisiunile acestui forum:
Nu puteti raspunde la subiectele acestui forum
|
|