Bitsgewijze operatoren (&, XOR, <<, ...) - 1

"Hallo Amigo!"

"Nog een kleine les over bitsgewijze operatoren."

"Je weet dat er naast de logische operatoren AND (&&), OR (||) en NOT (!), ook bitsgewijze operatoren AND (&), OR (|), NOT (~) en XOR(^ ), rechts?"

"Ja. Bilaabo heeft hier ooit een heel goede les over gegeven."

"Nou, over deze operators. Ik heb je twee dingen te vertellen:"

"Ten eerste, behalve NOT (~), kunnen ze worden toegepast op booleaanse variabelen, net als logische operatoren."

"Ten tweede, luie evaluatie is niet op hen van toepassing."

"Kijk naar dit voorbeeld:"

Code Gelijkwaardige code
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());
  }
 }
}

"Is de linkerkant compacter dan de rechterkant?"

"Ja."

"En heeft het dezelfde betekenis?"

"Ja."

"Helemaal juist. Maar kijk nu eens naar dezelfde uitdrukking met behulp van bitsgewijze operatoren :"

Code Gelijkwaardige code
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());
 }
 }
}

"Met andere woorden, de code is hetzelfde, maar absoluut elke bewerking zal worden uitgevoerd."

"Merk op dat als a nul is, er een uitzondering wordt gegenereerd bij het berekenen van c2!"

"Ah. Dat zie ik nu duidelijker."