Confronto.
Nel linguaggio C++ (così come probabilmente in tutti i linguaggi) esiste un valore come un valore booleano, che accetta due valori: true e false, 1 e 0. Come tipo di dati per lavorare con valori booleani, abbiamo boolean ( sinonimo - bool), che può assumere i valori 0 (false) o 1 (true). Esattamente lo stesso valore restituisce il risultato del confronto di due numeri o variabili, per il confronto abbiamo diversi operatori di confronto:
- == - uguaglianza (a == b)
- != - disuguaglianza (a != b)
- >= - maggiore o uguale a (a >= b)
- <= - minore o uguale a (a <= b)
- > - maggiore
(a > b)
- < - minore (a < b)
Negli esempi astratti di cui sopra, ciò che accade ad a e b è che la parentesi "restituisce" un valore booleano, che è il risultato del confronto di numeri. Ad esempio, se abbiamo a = 5 e b = 7, la parentesi (a > b) restituirà false perché a è minore di b. E ad esempio (a != b) restituirà true, perché a non è realmente uguale a b.
Gli operatori logici vengono utilizzati per collegare diversi valori logici:
- ! - logico NOT, negazione. Analogo: l'operatore not
- && - logico AND. Analogo: l'operatore and
- || - logico OR. Analogo: l'operatore or
Esempi:
byte a = 5;
byte
b = 7;
(a > b); // false (maggiore)
(a != b); // true (disuguaglianza)
!(a > b); // true (logico NOT, negazione)
boolean flag = true;
flag; // true
!flag; // false (logico NOT)
flagA = true;
flagB = false;
(flagA && flagB); // false perché B false (logico AND)
flagA = true;
flagB = true;
(flagA and
flagB); // true perché entrambi true (operatore and)
flagA = true;
flagB = false;
(flagA || flagB); // true perché almeno A è true (logico OR)
flagA = false;
flagB = false;
(flagA or flagB); // false perché né A né B sono true (operatore or)
I risultati degli operatori di confronto possono essere utilizzati per lavorare con le condizioni, così come per un ciclo while.
Confronto float - con il confronto dei numeri float, tutto non è così semplice a causa della particolarità del modello "numeri in virgola mobile", i calcoli vengono talvolta eseguiti con un piccolo errore, per questo motivo il confronto potrebbe non funzionare correttamente. Esempio:
float val1 = 0.1; // val1 == 0.100000000
float val2 = 1.1 - 1.0; // val2 == 0.100000023
if (val1 == val2); // false (uguaglianza)
Sembrerebbe che val1 == val2, ma il confronto restituirà false.
Fai attenzione quando confronti i numeri float, specialmente con gli operatori <=: il risultato potrebbe essere errato e illogico.