Deo zbornika Uvod u programiranje kroz C
Relacijski i logički operatori
Relacijski operatori su >
, >=
, <
, <=
. Svi imaju isti prioritet. Odmah ispod njih po prioritetu su operatori jednakosti ==
i !=
.
Relacijski operatori imaju niži prioritet od aritmetičkih operatora, pa izraz i<lim-1
se tretira kao i i<(lim-1), što je prirodno.
Logički operatori &&
i ||
Mnogo zanimljiviji su logički operatori &&
i ||
. Izrazi povezani ovim operatorima računaju se slijeva udesno, računanje se prekida čim se ustanovi točnost ili netočnost rezultata. Mnogi C programi napisani su s jakim osloncem u ovim pravilima. Npr. evo petlje ulazne funkcije getline
:
for(i=0; i<lim-1 && (c=getchar()) != '\n' && c != EOF; ++i)
s[i]=c;
Prije čitanja novog znaka treba obavezno provjeriti ima li za njega mjesta u znakovnom nizu s
, tako da se najprije obavi provjera i<lim-1
. Ako je odgovor negativan, nema smisla dalje čitati znakove. Bilo bi jednako tako pogrešno ako bi se prije pozivanja funkcije getchar
, obavila provjera c!=EOF
, jer pozivanje i dodjela vrijednosti moraju izvršiti prije negoli se testira znak pohranjen u c
.
Prioritet &&
je viši od ||
, a oba su operatora nižeg ranga od relacijskih i operatora jednakosti, pa zato u slijedećem izrazu nije potrebno dodavati zagrade:
i < lim-1 && (c=getchar()) != '\n' && c != EOF
No, kako je prioritet !=
viši od operatora dodjele, zagrade su obavezne u izrazu što slijedi:
(c=getchar()) != '\n'
da bi se osigurala dodjela varijabli c
, a potom i usporedba sa ‘\n’.
Po definiciji, brojčana vrijednost relacijskog ili logičkog izraza je 1 ako je relacija točna, a 0 ako je netočna.
Negacija
Operator unarne negacije !
pretvara 1 u 0 i obratno. Najčešća je upotreba ovog operatora u izrazima poput:
if(!valid)
umjesto
if(valid==0)
Teško je kazati koja je forma bolja. Konstrukcije kao !valid
lijepo izgledaju (“ako nije valid”), dok bi zahtjevnije konstrukcije bile i teže za čitanje.
Vježba 2-2.
Napišite petlju ekvivalentnu gore napisanoj for petlji bez upotrebe &&
ili ||
.
Izvor: Brian Kernighan i Dennis Ritchie, Programski jezik C