Barninga Z
a- a+

Gli operatori: Operatori logici di test

Operatori logici di test 

Gli operatori logici di test possono essere suddivisi in duegruppi: quelli normalmente usati nei confronti tra valori equelli utilizzati per collegare i risultati di due confronti.Ecco una breve serie di esempi relativi al primogruppo: 

(a == b) // VERA se a e' UGUALE a b  (a != b) // VERA se a e' diversa da b  (a < b)  // VERA se a e' strettamente minore di b  (a > b)  // VERA se a e' strettamente maggiore di b  (a <= b) // VERA se a e' minore o uguale a b  (a >= b) // VERA se a e' maggiore o uguale a b

La grafia di detti operatori ed il loro significato appaionoscontati, ad eccezione, forse, dell'operatore diuguaglianza "==": in effetti i progettistidel C, constatato che nella codifica dei programmi iconfronti per uguaglianza sono, generalmente, circa lametà degli assegnamenti, hanno deciso[7] didistinguere i due operatori "raddoppiando" lagrafia del secondo per esprimere il primo. Ne segue che 

a = b;

assegna ad a il valore di b, mentre 

(a == b)

esprime una condizione che è vera se le due variabilisono uguali. La differente grafia dei due operatori consentedi mortificare, ancora una volta, la povera regola KISS,rendendo possibile scrivere condizioni come 

if(a = b) ....

Per quanto appena detto, è ovvio che tale scritturanon può significare "se a èuguale a b": si tratta infatti, inrealtà, di un modo estremamente succinto perdire 

a = b;    if(a) ....

che, a sua volta, equivale a 

a = b;    if(a != 0) ....

cioè "assegna b ad a, e se ilrisultato (cioè il nuovo valore di a)è diverso da 0..." , dal momento che ilC, ogni qualvolta sia espressa una condizione senza secondotermine di confronto assume che si voglia verificane lanon­nullità. Carino, vero? 

Veniamo al secondo gruppo. Gli operatori logici normalmenteusati per collegare i risultati di due o più confrontisono due: si tratta del prodotto logico("&&" , o and) e dellasomma logica ("||" , oor). 

(a < b && c == d)// AND: vera se entrambe sono VERE  (a < b || c == d)// OR: vera se ALMENO UNA e' VERA

E' possibile scrivere condizioni piuttosto complesse, mavanno tenute presenti le regole di precedenza edassociatività. Ad esempio, poiché tutti glioperatori del primo gruppo hanno precedenza maggiore diquelli del secondo, la 

(a < b && c == d)

è equivalente alla 

((a < b) && (c == d)

Nelle espressioni in cui compaiono sia"&&" che "||"va ricordato che il primo ha precedenza rispetto al secondo,perciò 

(a < b || c == d && d > e)

equivale a 

((a < b) || ((c == d) && (d > e)))

Se ne trae, se non altro, che in molti casi usare leparentesi, anche quando non indispensabile, èsicuramente utile, dal momento che incrementa in misuranotevole la leggibilità del codice e abbatte laprobabilità di commettere subdoli errori logici. 

 



Ti potrebbe interessare anche

commenta la notizia