Bitvise operatorer (&, XOR, <<, ...) - 1

"Hej, Amigo!"

"En lille lektion mere om bitvise operatører."

"Du ved, at ud over de logiske operatorer AND (&&), OR (||) og NOT (!), er der også bitvise operatorer AND (&), OR (|), NOT (~) og XOR(^ ), højre?"

"Jep. Bilaabo gav engang en meget god lektion om dette."

"Nå, om disse operatører. Jeg har to ting at fortælle dig:"

"For det første, bortset fra NOT (~), kan de anvendes på booleske variable, ligesom logiske operatorer."

"For det andet gælder doven evaluering ikke for dem."

"Se på dette eksempel:"

Kode Tilsvarende kode
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());
  }
 }
}

"Er venstre side mere kompakt end højre?"

"Ja."

"Og har det samme betydning?"

"Ja."

"Helt rigtigt. Men se nu på det samme udtryk ved hjælp af bitvise operatorer :"

Kode Tilsvarende kode
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());
 }
 }
}

"Med andre ord er koden den samme, men absolut hver operation vil blive udført."

"Bemærk, at hvis a er nul, vil der blive kastet en undtagelse ved beregning af c2!"

"Ah. Jeg kan se det tydeligere nu."