Шаг 24.
Язык программирования C#. Начала
Базовые типы и операторы. Логические операторы

    На этом шаге мы перечислим эти операторы и рассмотрим особенности их использования.

    Операндами в выражениях на основе логических операторов являются значения логического типа (true или false), и результатом таких выражений также являются значения логического типа. Логические операторы полезны для того, чтобы на основе некоторых простых условий (логических значений) получить новое более сложное условие (логическое). Логические операторы перечислены и кратко описаны в таблице 1.

Таблица 1. Логические операторы
Оператор Описание
& Оператор "логическое и". Результатом выражения А&В является значение true, если оба операнда А и В равны true. Если хотя бы один из операндов равен false, то результатом выражения А&В является значение false
&& Оператор "логическое и" (упрощенная форма). Значение выражения вида А&&В равно true, если оба операнда А и B равны true. В противном случае результат выражения равен false. Если при вычислении первого операнда А оказалось, что он равен false, то значение второго операнда В не вычисляется
| Оператор "логическое или". Результатом выражения А | В является значение true, если хотя бы один из операндов А или В равен true. Если оба операнда равны false, то результатом выражения А | В является значение false
|| Оператор "логическое или" (упрощенная форма). Значение выражения вида А || В равно true, если хотя бы один из операндов А или В равен true. В противном случае результат выражения равен false. Если при вычислении первого операнда А оказалось, что он равен true, то значение второго операнда в не вычисляется
^ Оператор "логическое исключающее или". Результатом выражения А^В является значение true, если один из операндов А или В равен true, а другой равен false. Если оба операнда равны false или оба операнда равны true, то результатом выражения А^В является значение false
! Оператор "логическое отрицание". Значение выражения равно true, если значение операнда А равно false. Если значение операнда А равно true, го значение выражения равно false

    Логические операторы позволяют выполнять четыре операции:

    Более сложные логические операции выполняются путем комбинированного использования логических операторов. Для выполнения операций "логическое и" и "логическое или" можно использовать две формы операторов (основную и упрощенную).

    Правила вычисления результата для операции "логическое и" проиллюстрированы в таблице 2.

Таблица 2. Операция "логическое и" (А&В или А&&В)
A true false
B
true true false
false false false

    Если операнды А и В отождествлять с некоторыми условиями, то "сложное" условие А&В (или А&&В) состоит в том, что истинно и условие А, и условие В. Другими словами, значение выражения А&В (или А&&В) будет равно true, только если равно true значение операнда А и одновременно равно true значение операнда В. Очевидно, что если при проверке значения операнда А окажется, что его значение равно false, то результатом логической операции будет false вне зависимости от того, каково значение операнда В. Этот факт принимается во внимание в работе упрощенной формы оператора &&: если при вычислении значения выражения вида А&&В оказалось, что значение операнда А равно false, то значение операнда В вообще не будет вычисляться. При вычислении значения выражения вида А&В значение операнда В вычисляется вне зависимости от того, какое значение операнда А.


На первый взгляд может показаться, что различие между операторами & и && "косметическое". Но это не так. Проиллюстрируем это на небольшом примере. Допустим, имеются две целочисленные переменные х и у. Рассмотрим выражение (х! =0) & (у/х>1). Проанализируем, как будет вычисляться значение такого выражения. Сначала вычисляется значение выражения х!=0. Оно равно true, если значение переменной х отлично от нуля. Затем вычисляется значение выражения у/х>1. Оно равно true, если частное от деления у на х больше 1. Проблема в том, что если значение переменной х равно 0, то при вычислении выражения у/х возникнет ошибка (деление на ноль). А вот если вместо выражения (х!=0) & (у/х>1) взять выражение (х!=0) && (у/х>1), то проблема с делением на ноль снимается автоматически: если значение переменной х равно 0, то значение выражения х!=0 равно false и условие у/х>1 вообще вычисляться не будет.

    Как вычисляется результат операции "логические или", демонстрирует таблица 3.

Таблица 3. Операция "логическое или" (А|В или А||В)
A true false
B
true true true
false true false

    "Сложное" условие А|В (или А||В) состоит в том, что истинно хотя бы одно условие, А или В. Значением выражений А|В или А||В является false только в том случае, если оба операнда А и В равны false. Поэтому если при вычислении значения операнда А окажется, что его значение равно true, то в принципе значение второго операнда в можно не вычислять - результат от этого не зависит. Именно по такой схеме "работает" упрощенная форма оператора ||. При использовании оператора | значение второго операнда вычисляется вне зависимости от значения первого операнда.

    Для операции "логическое исключающее или" можно дать такую интерпретацию: результат является истинным, если у операндов разные значения. Более детально это показано в таблице 4.

Таблица 3. "логическое исключающее или" (А^В)
A true false
B
true false true
false true false

    При одинаковых значениях операндов А и B значением выражения А^В является false, а если значения операндов А и В разные, то результатом выражения является значение true.


Операцию "логическое исключающее или" можно выполнить с помощью операторов & и !. Желающие могут проверить, что для логических значений А и В результаты выражений А^В и (А|В)&(!(А&В)) совпадают.

    Оператор ! для выполнения операции "логическое отрицание" - единственный логический унарный оператор. Правила выполнения этой операции иллюстрируются в таблице 4.

Таблица 4. Операция "логическое отрицание" (!А)
А true false
false true

    Здесь все просто. Если операнд А истинный (значение true), то результат выражения ложный (значение false). Если операнд А ложный (значение false), то результат выражения истинный (значение true). И в том и в другом случае значение операнда А остается неизменным - то есть выполнение команды вида не меняет значение операнда А.


Мы еще будем обсуждать логические операторы в шагах, посвященных перегрузке операторов.

    На следующем шаге мы рассмотрим побитовые операторы и двоичные коды.




Предыдущий шаг Содержание Следующий шаг