Originariamente inviato da LeleFT
Osserva cosa hai fatto:
nella seconda if hai scritto una & in meno. In questo modo viene interpretata una cosa del genere:

(birthday == false) è un'espressione che ha valore FALSE
(age-- >= 64) è un'espressione che ha valore FALSE
l'operatore & bit a bit fa una AND fra uno 0 e uno 0 restituendo 0, quindi l'espressione nella guardia dell'if è FALSA. Ma l'operazione age-- VIENE ESEGUITA per poter valutare l'espressione.

Nel primo caso, invece, è una concatenazione logica di AND: l'if termina con false non appena uno qualsiasi dei suoi operandi è falso, cioè il primo. Non viene valutato il resto dell'espressione.

Cosa succede, quindi: viene valutata (birthday == false) risulta falsa e l'if TERMINA SUBITO, senza valutare il resto. Stampa, quindi, l'età 64.

Dopo viene valutata la seconda IF. Qui viene valutato il primo termine ed è un false. Poi viene valutata la seconda espressione (non c'è una concatenazione di AND (&&) ma un operazione bit per bit!) e viene eseguita age--. E' falsa, quindi il risultato finale è falso, esce dall'if e stampa age, che ora vale 63.

Ciao.
aaaaaaaaahhhhhhhh!ora ho capito! tnx!

Pensavo che faceva solo un controllo del tipo 63>=64 senza modificare la variabile!

Allora se birthday=true visualizza 63 e 62?

Se si, c'è un modo per fare un controllo simile senza modificare la variabile?