Operatory bitowe (&, XOR, <<, ...) - 1

"Cześć, Amigo!"

„Jeszcze jedna mała lekcja o operatorach bitowych”.

„Wiesz, że oprócz operatorów logicznych AND (&&), OR (||) i NOT (!) istnieją również operatory bitowe AND (&), OR (|), NOT (~) i XOR(^ ), Prawidłowy?"

„Tak. Bilaabo dał kiedyś bardzo dobrą lekcję na ten temat”.

„Cóż, jeśli chodzi o tych operatorów. Mam ci do powiedzenia dwie rzeczy:”

„Po pierwsze, z wyjątkiem NOT (~), można je zastosować do zmiennych boolowskich, podobnie jak operatory logiczne”.

„Po drugie, leniwa ocena ich nie dotyczy”.

„Spójrz na ten przykład:”

Kod Równoważny kod
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());
  }
 }
}

„Czy lewa strona jest bardziej zwarta niż prawa?”

"Tak."

— A czy to ma to samo znaczenie?

"Tak."

„Zgadza się. Ale teraz spójrz na to samo wyrażenie, używając operatorów bitowych :”

Kod Równoważny kod
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());
 }
 }
}

„Innymi słowy, kod jest taki sam, ale absolutnie każda operacja zostanie wykonana”.

„Zauważ, że jeśli a ma wartość null, podczas obliczania c2 zostanie zgłoszony wyjątek!”

„Ach. Teraz widzę to wyraźniej”.