Il C++ mette a disposizione un numero superiore di operatori rispetto ad altri linguaggi, ma alcuni di essi risultano non facilmente interpretabili perché i loro simboli non hanno un immediato riferimento mnemonico alla funzione svolta. Vediamo i più importanti operatori del C++.
Valori booleani: true e false
Prima di parlare degli operatori booleani, è importante sapere cosa è un valore "booleano". Un booleano può assumere solo due valori: true
o false
. Nessun altro valore è permesso.
Gli identificatori booleani e le operazioni su di essi sono molto usati. Spesso, in un programma, si rende necessario sapere se una certa condizione è vera (true
) oppure falsa (false
). Nel primo caso, il corso del programma prenderà una determinata direzione che, invece, non sarebbe intrapresa altrimenti.
Un esempio grafico particolarmente attinente alle operazioni con boolean è rappresentato dalle check box. Se una check box è selezionata si vorrà intraprendere una determinata azione. In caso contrario non si vorrà fare nulla.
La maggior parte dei linguaggi di programmazione contemplano il tipo booleano. La maggior parte dei compilatori C++ riconosce il tipo boolean con la parola chiave bool
. Altri, invece, accettano la scrittura boolean
. Diamo per buono che il compilatore riconosca il tipo bool
. In tal caso, una dichiarazinone di una variabile booleana sarà la seguente:
bool flag;
I principali operatori di tipo booleano, ovvero gli operatori che consentono di eseguire operazioni su elementi di tipo bool
sono 3:
Funzione | Simbolo | Significato |
---|---|---|
AND | && |
Congiunzione logica |
OR | || |
Disgiunzione logica |
NOT | ! |
Negazione logica |
Ciascun operatore prende in input uno o due booleani e restituisce in output un altro booleano.
AND, prende in input due operandi e produce in output un booleano, attenendosi al seguente comportamento: Se entrambi gli operatori sono true allora l'output è true; in tutti gli altri casi l'output è uguale a false.
OR, prende in input due operandi e produce in output un booleano, attenendosi al seguente comportamente: Se almeno undo degli operandi è uguale a true, l'output è true; altrimenti, se nessuno dei due operandi è uguale a true l'output sarà false.
NOT, prende in input un solo operando e produce in output un booleano, attenendosi al seguente comportamento: Se l'operando di input è true allora l'output sarà false. Se, invece l'operando di input è false, allora l'output sarà uguale a true. In altri termini, l'operatore di NOT prende un input e ne restituisce l'esatto contrario.
Vediamo ora alcuni esempi sull'utilizzo dei tre operatori definiti.
// Supponiamo che Gianni sia stanco
bool gianniStanco = true;
// Supponiamo pure che Gianni non sia costretto ad alzarsi presto
bool gianniDeveAlzarsiPresto = false;
// Andrà a letto ora Gianni?
Bool gianniSiCoricaOra = gianniStanco && gianniDeveAlzarsiPresto;
// Il risultato è false
L'esempio precedente è abbastanza semplice da comprendere. La prima variabile bool
(gianniStanco
) viene inizializzata a true
, il che equivale a dire che Gianni è stanco. La seconda variabile bool (gianniDeveAlzarsiPresto
) è inizializzata invece a false
, il che vuol dire che Gianni non ha la necessità di alzarsi presto la mattina. La terza variabile booleana (gianniSiCoricaOra
) è un risultato dell'operazione di AND tra le due precedenti. Ovvero: Gianni deve andare a letto adesso soltanto se è stanco e deve alzarsi la mattina presto. Quindi, l'operatore AND è il più adatto in tale circostanza.
Se, invece, Gianni decidesse di andare a letto se anche soltanto una delle due precondizioni fosse vera allora l'operatore da utilizzare sarebbe l'operatore OR. Avremo in tal caso:
bool gianniSiCoricaOra = gianniStanco || gianniDeveAlzarsiPresto;
// Il risultato è true
Se, ancora, si verifica la condizione:
gianniStanco = true
bool gianniInForma = !gianniStanco
// gianniInForma sarà uguale a false
Ovvero la variabile booleana gianniInForma
sarà vera se non è vera quella che identifica Gianni stanco. Questo è un banale esempio dell'operatore NOT.
L'utilizzo degli operatori booleani è perfettamente lecito anche su variabili che non siano bool
. In C++ il valore "0" equivale a false
e qualunque valore diverso da zero equivale a true. Ad esempio:
int ore = 4;
int minuti = 21;
int secondi = 0;
bool timeIstrue = ore && minuti && secondi;
Poiché il risultato deriva dall'esame dei tre operandi e c'è un valore (secondi) che è uguale a zero (ovvero equivale a false) il risultato dell'espressione è false.