Логические операторы
Логические операторы языка Java выполняются только с операндами типа boolean.
Следующая таблица перечисляет логические операторы языка Java:
Операция | Описание |
& | Логическая операция И (AND) или конъюнкция |
| | Логическая операция ИЛИ (OR) или дизъюнкция |
^ | Логическая операция исключающее ИЛИ (XOR) |
! | Логическая унарная операция НЕ (NOT) |
|| | Укороченная логическая операция ИЛИ (short-circuit) |
&& | Укороченная логическая операция И (short-circuit) |
== | Равенство |
!= | Неравенство |
&= | Логическая операция И с присваиванием |
|= | Логическая операция ИЛИ с присваиванием |
^= | Логическая операция исключающее ИЛИ с присваиванием |
1. Логические операторы OR, AND, XOR, NOT.
Начнем с операций OR(|), AND(&), XOR(^), NOT(!). Операторы OR, AND, XOR являются бинарными - они требуют два оператора. NOT - это унарный оператор, только один оператор участвует в операции. Результаты выполнения этих логических операций представлены в следующей таблице:
A | B | A|B | A&B | A^B | !A |
false | false | false | false | false | true |
true | false | true | false | true | false |
false | true | true | false | true | true |
true | true | true | true | false | false |
OR (|) - результат будет true
, если хотя бы одно значение равно true
. Пример: для того, чтобы забрать ребенка из садика, должна прийти либо мать, либо отец, либо оба - в любом случае результат будет положительный. Если же никто не придет, ребенка не заберут - результат будет отрицательный.
AND (&) - результат будет true
, только если и A, и B равны true
. Пример: для того чтобы свадьба состоялась, и невеста (A) и жених (B) должны явиться на бракосочетание, иначе оно не состоится.
XOR (^) - результат будет true
, только если или A равно true
, или В равно true
. Пример: у двух друзей на двоих один велосипед, поездка на велосипеде состоится только если один из них поедет на нем. Вдвоем они ехать не могут.
NOT (!) - инвертирование значения. Если значение было true, то станет false
, и наоборот.
Рассмотрим пример использования логических операторов:
public class BooleanLogic1 {
public static void main(String[] args) {
boolean a = true;
boolean b = false;
boolean c = a | b;
boolean d = a & b;
boolean e = a ^ b;
boolean f = (!a & b) | (a & !b);
boolean g = !a;
System.out.println("a = " + a);
System.out.println("b = " + b);
System.out.println("a | b = " + c);
System.out.println("a & b = " + d);
System.out.println("a ^ b = " + e);
System.out.println("(!a & b) | (a & !b) = " + f);
System.out.println("!a = " + g);
}
}
2. Укороченные логические операторы (short-circuit).
Чаще всего в языке Java используются так называемые укороченные логические операторы (short-circuit):
Правый операнд сокращенных операций вычисляется только в том случае, если от него зависит результат операции, то есть если левый операнд конъюнкции имеет значение true
, или левый операнд дизъюнкции имеет значение false
.
В формальной спецификации языка Java укороченные логические операции называются условными.
В следующем примере правый операнд логического выражения вычисляться не будет, так как условие d!=0
не выполняется и нет смысла дальше вычислять это выражение:
public class BooleanLogic2 {
public static void main(String[] args) {
int d = 0;
int num = 10;
if (d != 0 && num / d > 10) {
System.out.println("num = " + num);
}
}
}
Если же логическое выражение переписать как d != 0 & num / d > 10
, то правое выражение вычисляться будет. И в этом случае программа выбросит исключение времени выполнения с сообщением - на ноль делить нельзя.
Если нам надо сравнить возможный диапазон значений для какой-то переменной, например - a<x<b,
такое условие разбивается на два: a<x &&x<b
:
public class BooleanLogic3 {
public static void main(String[] args) {
int a = 1;
int b = 2;
int x = 3;
System.out.print(a < x && x < b);
// System.out.print(a < x < b);//Ошибка компиляции
}
}
3. Операции ==, !=.
Здесь все просто - чтобы сравнить два значения типа boolean
, можно использовать знаки ==
(проверка на равенство) и !=
(проверка на неравенство):
public class BooleanLogic4 {
public static void main(String[] args) {
boolean b1 = true;
boolean b2 = false;
System.out.println(b1 == b2);
System.out.println(b1 != b2);
}
}
4. Операции с присваиванием.
Также существуют операции с присваиванием для AND, OR, XOR. Посмотрим пример:
public class BooleanLogic5 {
public static void main(String[] args) {
boolean b1 = true;
boolean b2 = true;
b1 &= b2;//равносильно b1 = b1 & b2;
System.out.println(b1);
b1 |= b2; //равносильно b1 = b1 | b2;
System.out.println(b1);
b1 ^= b2; //равносильно b1 = b1 ^ b2;
System.out.println(b1);
}
}
Презентацию с видео можно скачать на Patreon.
Зарегистрируйтесь или войдите, чтобы иметь возможность оставить комментарий.