Operatori pe biți (&, XOR, <<, ...) - 1

"Bună, Amigo!"

„Încă o mică lecție despre operatorii pe biți.”

„Știți că, pe lângă operatorii logici AND (&&), SAU (||) și NOT (!), există și operatori pe biți și (&), SAU (|), NOT (~) și XOR(^ ), dreapta?"

"Da. Bilaabo a dat odată o lecție foarte bună despre asta."

"Ei bine, despre acești operatori. Am două lucruri să vă spun:"

„În primul rând, cu excepția NOT (~), ele pot fi aplicate variabilelor booleene, la fel ca operatorii logici.”

„În al doilea rând, evaluarea leneșă nu se aplică lor”.

„Uită-te la acest exemplu:”

Cod Cod echivalent
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());
  }
 }
}

„Este partea stângă mai compactă decât cea dreaptă?”

"Da."

— Și are același sens?

"Da."

„Destul de corect. Dar acum uită-te la aceeași expresie folosind operatori pe biți :”

Cod Cod echivalent
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());
 }
 }
}

„Cu alte cuvinte, codul este același, dar absolut fiecare operație va fi efectuată”.

"Rețineți că dacă a este nul, se va face o excepție la calcularea c2!"

— Ah. Văd asta mai clar acum.