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

"Hej, Amigo!"

"En till liten lektion om bitvisa operatörer."

"Du vet att förutom de logiska operatorerna AND (&&), OR (||) och NOT (!), finns det också bitvisa operatorer AND (&), OR (|), NOT (~) och XOR(^ ), höger?"

"Japp. Bilaabo gav en gång en mycket bra lektion om detta."

"Tja, om de här operatörerna. Jag har två saker att berätta för dig:"

"För det första, förutom NOT (~), kan de tillämpas på booleska variabler, precis som logiska operatorer."

"För det andra, lat utvärdering gäller inte dem."

"Titta på det här exemplet:"

Koda Motsvarande 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());
  }
 }
}

"Är vänster sida mer kompakt än höger?"

"Japp."

"Och har det samma betydelse?"

"Japp."

"Helt riktigt. Men titta nu på samma uttryck med hjälp av bitvisa operatorer :"

Koda Motsvarande 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());
 }
 }
}

"Med andra ord, koden är densamma, men absolut varje operation kommer att utföras."

"Observera att om a är null, kommer ett undantag att skapas vid beräkning av c2!"

"Ah. Jag kan se det tydligare nu."