Побітові оператори (&, xor, <<,...) - 1

— Привіт, Аміго!

І ще одна маленька лекція про побітових операторів.

Знаєш же, що крім логічних операторів AND(&&), OR(||) і NOT(!), є ще побітові AND(&), OR(|), NOT(~), XOR( ^)?

— Ага. Свого часу Білаабо давав дуже гарну лекцію на цю тему.

— Так от щодо цих операторів у мене є дві новини:

По-перше, їх можна застосовувати до boolean-змінних, крім оператора NOT(~), так само, як і логічні оператори.

По-друге, при їх застосуванні лінивих обчислень не відбувається.

Дивись приклад:

Код Аналог
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());
  }
 }
}

Ліва частина компактніша за праву?

— Ага.

— А за змістом така сама?

— Ага.

— Отож і воно. А ось тепер такий самий вислів із використанням побітових операцій:

Код Аналог
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());
 }
 }
}

Тобто. код той самий, але абсолютно всі обчислення будуть зроблені.

Зверніть увагу, що якщо a дорівнює null, то при обчисленні c2 буде викинуто виняток!

— Ага. Тепер картина зрозуміліша.