Содержание
Логические операторы в C# используются для оценки условий и могут использоваться также для управления потоком выполнения программы. Эти операторы работают с логическими выражениями. Такие операторы работают с логическими выражениями, то есть слева и справа от оператора должно находиться либо условие, либо переменная типа bool
Логические операторы в C#
Логическое отрицание (!)
Унарный префиксный оператор ! выполняет логическое отрицание операнда, то есть, возвращает true, если операнд имеет значение false, и, наоборот, false, если операнд имеет значение true. Этот оператор работает аналогично арифметическому унарному оператору “минус”, но только меняет какое-либо логическое значение на противоположное.
Логическое И (&)
Это оператор всегда обрабатывает оба операнда и возвращает true только в том случае, если оба оператора равны true
Например, решим задачу: даны два числа a и b. Если оба числа больше 2, то вывести на экран их сумму, иначе — утроенную сумму.
Мы уже знаем, что в C# есть операторы сравнения и условный оператор, поэтому могли бы решить эту задачу следующим образом:
int a = 3;
int b = 4;
if (a > 2)
{
if (b > 2)
Console.WriteLine(a + b);
}
else
Console.WriteLine(3*(a + b));
Вполне рабочее решение, однако, это решение можно сократить, использовав логическое И следующим образом:
if ((a > 2) & (b > 2))
{
Console.WriteLine(a + b);
}
else
Console.WriteLine(3*(a + b));
здесь мы сразу проверяем обе переменные в одном условии:
(a > 2) & (b > 2)
которое читается так: если a больше 2 И b больше двух, то выводим сумму, иначе – выводим утроенную сумму.
В приведенном примере программа будет выполняться в следующей последовательности:
- присваиваются значения переменным
aиb - проверяется первое условие оператора if:
a > 2. Это условие истинно, так как a = 3. Следовательно левый операнд для оператора&будет равенtrue - проверяется второе условие оператора if:
b > 2. Это условие истинно, так как b = 4. Следовательно правый операнд оператора&будет равенtrue - проверяется условие
true & true. Так как оба операнда равныtrue, то оператор также вернетtrue - так как условие оператора
ifсоблюдается (равноtrue), то переходим к первой веткеifи вычисляем сумму двух переменных
Логическое ИЛИ (|)
Логическое ИЛИ обрабатывает оба операнда. В отличие от логического И этот оператор вернет true, если хотя бы один операнд будет иметь значение true.
Логическое исключающее ИЛИ (^).
Вычисляет оба операнда, но возвращает trueтолько в том случае, если левый и правый операторы не равны. Чтобы представить действие этого оператора, используем вот такую схему:
Результаты, которые возвращает оператор, в зависимости от значений операндов left и right представлены в таблице ниже
| left | right | Результат ^ | Пояснение |
| True | True | False | Левый и правый операторы равны. Оператор возвращает true ТОЛЬКО, если левый и правый операнды НЕ равны |
| False | False | False | Левый и правый операторы равны. Оператор возвращает true ТОЛЬКО, если левый и правый операнды НЕ равны |
| True | False | True | Левый и правый операторы НЕ равны. Оператор возвращает true ТОЛЬКО, если левый и правый операнды НЕ равны |
| False | True | True | Левый и правый операторы НЕ равны. Оператор возвращает true ТОЛЬКО, если левый и правый операнды НЕ равны |
Условное логическое И (&&)
В отличие от предыдущих бинарных логических операторов C# этот оператор обрабатывает правый операнд только тогда, когда это необходимо. Действие этого оператора следующее — он возвращает true только тогда, когда оба оператора равны true. То есть, этот оператор позволяет нам, при необходимости сократить вычисления условий.
| left | right | Результат && |
| True | True | True (правый операнд обработан) |
| False | False | False (правый операнд не обработан) |
| True | False | False (правый операнд обработан) |
| False | True | False (правый операнд не обработан) |
Вернемся к нашей задаче с двумя числами:
int a = 3;
int b = 4;
if ((a > 2) & (b > 2))
{
Console.WriteLine(a + b);
}
else
Console.WriteLine(3*(a + b));
Сейчас программа обрабатывает оба операнда – и левый и правый. Но, зачем нам проверять условие b > 2, если первое условие окажется ложным? Ведь в условии задачи сказано “Если оба числа больше 2“. В этом случае, выгоднее использовать логическое условное И, сократив тем самым вычисления:
if ((a > 2) && (b > 2))
{
Console.WriteLine(a + b);
}
else
Console.WriteLine(3*(a + b));
Теперь условие b > 2 будет проверяться только в том случае, если условие a > 2 будет истинно.
Условное логическое ИЛИ (||)
Также, как и предыдущий оператор, условное логическое ИЛИ обрабатывает правый оператор только когда необходимо. При этом результат выполнения условного логического ИЛИ будет true, если хотя бы один из операндов равен true
| left | right | Результат || |
| True | True | True (правый не операнд обработан) |
| False | False | False (правый операнд обработан) |
| True | False | True (правый не операнд обработан) |
| False | True | True (правый операнд обработан |
Подведем итог
Логические операторы в C# используют в качестве операндов только выражения или переменные, значение которых являются типом bool. Такие операторы используются наравне с операторами сравнения для выстраивания логики программы и проверки условий.
Домашнее задание №10
Даны два числа, если первое входит в диапазон [-10; 0], то второе не должно входить в диапазон [1; 10], и наоборот. Вывести сообщение об ошибке, если оба числа входят в указанные для них диапазоны.