ePrometeusCorsoJavaJava
testi articoli
Testi Articoli  Download
Home | Basi | Espressioni | Comandi | Classi | Ereditarieta | Eccezioni | Thread | Utilita | 
CorsoJava è ora Video! Free for all!
Clicca Qui!

Espressioni
Espressioni
Primitivi
Costanti
Booleane
Carattere
Numeri
Operatori
Promozione
Overloading
Aritmetici
Virgola Mobile
Relazionali
Binari
Shift
Negazione
And
Or
Condizionale
Incremento
Assegnamento

<<< Binari >>>

Gli operatori binari sono quelli che considerano i numeri come una maschera di bit, permettono di operare sui singoli bit. Questo è possibile solamente quando un numero è intero.

~ (not)
opera solo su interi
inverte ogni bit

il più semplice e l'operatore detto tilde (o serpentello). Questo operatore inverte i singoli bit della maschera. È importante tenere presente la precisione del numero che si vuole invertire. Se scrivo ~1, per le regole della promozione il numero uno ha precisione a 32 bit, quindi sto invertendo il numero binario 00000000000000000000000000000001 . Se invece scrivo ~1L, il numero 1L a una precisione a 64 bit, per cui devo invertire i bit del il numero 0000000000000000000000000000000000000000000000000000000000000001.

& (and) | (or) ^ (xor)
operano su interi
operano su booleani,

Quanto detto vale anche per i operatori binari di and (&), or (|) e or esclusivo (^).

Queste operatori possono calcolare dei valori di verità e falsità. In generale vengono infatti utilizzati per combinare delle condizioni. Per esempio, per vedere se valore è entro i limiti di un intervallo, occorre combinare due condizioni: "a > MIN & a < MAX". La parte "a > MIN" è una operazione che ritorna un risultato booleano, e lo stesso fa la parte "a < MAX". Abbiamo quindi due valori booleani su cui si deve effettuare un calcolo.

La regola è che and (&) ritorna true solo se entrambi i valori sono true (altrimenti false), mentre or (|) ritorna false solo se entrambi i valori sono a false (altrimenti ritorna true). L'operatore di or esclusivo (^, xor) ritorna true se solo uno dei due valori operati è true, altrimenti ritorna false.

and, or, ed exclusive-or bit-a-bit sui bit dei valori interi

Questi operatori operano anche su due numeri interi, ottenendo un nuovo numero di cui singoli bit sono il risultato delle operazioni booleane specifiche. Occorre quindi considerare ciascun bit come un valore booleano, dove 0 è false e 1 è true, ed effettuare i calcoli per ciascuno dei bit dei due numeri. Consideriamo un esempio in cui si opera su numeri di 4 bit (tenendo presente comunque che le operazioni sono sempre almeno su numeri di 32 bit). In questo esempio sono mostrati tutti i risultati possibili per ciascuno degli operatori.

0011 | 0101 == 0001
0011 & 0101 == 0111
0011 ^ 0101 == 0101
Notare che f() & g() chiama f() e g() sempre

Una cosa che può sembrare ovvia, ma che conosce delle eccezioni, è il fatto che facendo un calcolo, prima di ottenere risultato finale si calcolano i risultati intermedi. Ripeto in generale e così, ma vedremo un caso in cui non succede questo. Con questo operatori si è nel caso generale. Quindi se per esempio faccio f() & g(), succede quanto segue: prima viene calcolato f() (quindi mentalmente chiamando il metodo corrispondente), poi viene calcolato g() (anche in questo caso chiamando il metodo corrispondente), e infine facendo il calcolo. Notare che, scritto in questo modo, vengono sempre comunque chiamati entrambi i metodi, compresi i loro eventuali effetti collaterali. A volte si vuole invece che solo uno dei due dei metodi venne chiamato, per evitare l'effetto collaterale del secondo.

ePrometeus s.r.l. - Web Software House & Open Source System Integrator
MILANO - SAN BENEDETTO DEL TRONTO(AP)
Contatti: info@eprometeus.com