Логические операторы в C# - C# и .NET

Логические операторы в C#

Логические операторы в 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 больше двух, то выводим сумму, иначе – выводим утроенную сумму.

В приведенном примере программа будет выполняться в следующей последовательности:

  1. присваиваются значения переменным a и b
  2. проверяется первое условие оператора if: a > 2. Это условие истинно, так как a = 3. Следовательно левый операнд для оператора & будет равен true
  3. проверяется второе условие оператора if: b > 2. Это условие истинно, так как b = 4. Следовательно правый операнд оператора & будет равен true
  4. проверяется условие true & true. Так как оба операнда равны true, то оператор также вернет true
  5. так как условие оператора if соблюдается (равно true), то переходим к первой ветке if и вычисляем сумму двух переменных

Логическое ИЛИ (|)

Логическое ИЛИ обрабатывает оба операнда. В отличие от логического И этот оператор вернет true, если хотя бы один операнд будет иметь значение true.

Логическое исключающее ИЛИ  (^).

Вычисляет оба операнда, но возвращает trueтолько в том случае, если левый и правый операторы не равны. Чтобы представить действие этого оператора, используем вот такую схему:Логические операторы в C#

Результаты, которые возвращает оператор, в зависимости от значений операндов 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], и наоборот. Вывести сообщение об ошибке, если оба числа входят в указанные для них диапазоны.