Operatori bit a bit (&, XOR, <<, ...) - 1

"Ciao, Amico!"

"Un'altra piccola lezione sugli operatori bit per bit."

"Sapete che oltre agli operatori logici AND (&&), OR (||) e NOT (!), esistono anche operatori bit a bit AND (&), OR (|), NOT (~) e XOR(^ ), Giusto?"

"Sì. Bilaabo una volta ha dato un'ottima lezione su questo."

"Beh, riguardo a questi operatori. Ho due cose da dirti:"

"In primo luogo, ad eccezione di NOT (~), possono essere applicati a variabili booleane, proprio come gli operatori logici."

"In secondo luogo, la valutazione pigra non si applica a loro."

"Guarda questo esempio:"

Codice Codice equivalente
if (a != null && a.getName() != null && c != null)
{
 c.setName(a.getName());
}
if (a != null)
{
 if (a.getName() != null)
 {
  if (c != null)
  {
   c.setName(a.getName());
  }
 }
}

"Il lato sinistro è più compatto del destro?"

"Sì."

"E ha lo stesso significato?"

"Sì."

"Giusto. Ma ora guarda la stessa espressione usando gli operatori bit a bit :"

Codice Codice equivalente
if (a != null & a.getName() != null & c != null)
{
 c.setName(a.getName());
}
boolean c1 = (a != null);
boolean c2 = (a.getName() != null);
boolean c3 = (c != null);
if (c1)
{
 if (c2)
 {
  if (c3)
  {
   c.setName(a.getName());
 }
 }
}

"In altre parole, il codice è lo stesso, ma verrà eseguita assolutamente ogni operazione."

"Nota che se a è nullo, verrà generata un'eccezione durante il calcolo di c2!"

"Ah. Adesso lo vedo più chiaramente."