Bitenkénti operátorok (&, XOR, <<, ...) - 1

– Szia Amigo!

"Még egy kis lecke a bitenkénti operátorokról."

"Tudod, hogy az ÉS (&&), OR (||) és NOT (!) logikai operátorokon kívül vannak bitenkénti AND (&), OR (|), NOT (~) és XOR(^) operátorok is. ), jobb?"

– Igen. Bilaabo egyszer nagyon jó leckét adott erről.

"Nos, ezekről az operátorokról. Két dolgot kell elmesélnem:"

"Először is, a NOT (~) kivételével, a logikai változókhoz hasonlóan alkalmazhatók logikai változókra."

"Másodszor, a lusta értékelés nem vonatkozik rájuk."

"Nézd ezt a példát:"

Kód Egyenértékű kód
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());
  }
 }
}

– A bal oldal tömörebb, mint a jobb?

"Igen."

– És ugyanaz a jelentése?

"Igen."

"Teljesen helyes. De most nézze meg ugyanazt a kifejezést bitenkénti operátorokkal :"

Kód Egyenértékű kód
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());
 }
 }
}

"Más szóval, a kód ugyanaz, de abszolút minden műveletet végrehajtanak."

"Jegyezd meg, hogy ha a nulla, akkor a c2 kiszámításakor kivételt dobunk!"

– Ah. Most már tisztábban látom.