Основные логические операторы
Название логической операции | Оператор | |||
математ. | Basic, Pascal | С++, Java | ||
логическое отрицание «НЕ» (инверсия) | ¯ | Not | ! | |
логическое «И» (конъюнкция) | Ù | · | And | && |
логическое «ИЛИ» (дизъюнкция) | Ú | + | Or | | | |
Простейший логический оператор – NOT. Он предшествует единственному операнду и возвращает его логическую противоположность – иначе говоря, «отрицает» операнд. Например, выражение NOT Тruе даёт в результате False (булево значение, обратное Тruе); а выражение NOT (4 < 3) – Тruе, так как условие (4 < 3) ложно. Кроме того, этот оператор обладает наивысшим приоритетом по сравнению с остальными булевыми операторами. Кстати, операция отрицания является унарной, или одноместной, в отличие от остальных логических операций, являющихся бинарными, или двуместными, т.е. выполняющими действия с двумя операндами.
Следующий (в порядке убывания приоритета) оператор – AND. Он возвращает True, только если оба операнда имеют значение True. По смыслу он соответствует английскому слову and (русскому и), что можно проиллюстрировать, например, таким утверждением: «Он получит эту должность, только если знает английский и разбирается в компьютерах».
Оператор OR возвращает True, если любой из двух операндов True или если оба True. И в этом случае логический смысл оператора совпадает с соответствующим словом в языке: «Я куплю этого кота, если он не дороже 50 долларовилиесли он – сиамской породы».
Аналогично операциям сравнения логические операции могут связать два или более отношения и возвратить истинную или ложную величину, используемую для управления ходом выполнения программы.
Пример 1. Определить, что сумма баллов S,набранная студентом на тестированиинаходится в пределах 60¸100 баллов, т.е. принадлежит интервалу [60,100] :
S >= 60 AND S <= 100.
Пример 2. Определить, что сумма баллов S,набранная студентом на тестировании,не входит в пределы 60¸100 баллов, т.е. находится вне интервала [60, 100] :
NOT (S >= 60 AND S <= 100);
или, что даёт тот же самый результат,
S < 60 OR S > 100.
Правила выполнения операций в алгебре логики определяются рядом аксиом, теорем и следствий. В частности, для алгебры логики выполняются следующие законы:
1) сочетательный (ассоциативность):
(а OR b) OR с = а OR (b OR с);
(а AND b) AND с = а AND (b AND с).
2) переместительный (коммутативный):
а OR b = b OR а;
а AND b = b AND а.
3) распределительный (дистрибутивность конъюнкции и дизъюнкции относительно дизъюнкции и конъюнкции):
а AND (b OR с) = а AND b OR а AND с;
а OR b AND с = (а OR b) AND (а OR с).
Справедливы также следующие соотношения: NOT NOT a = a;
а OR а AND b = а; NOT a OR NOT b = NOT (a AND b) и др.
Логические операции могут производиться не только над булевыми величинами, но и над битами операндов. В этом случае логическая операция возвращает поразрядный результат, который либо истинен (1), либо ложен (0). В языках программирования могут существовать специальные операторы побитового выполнения логических операций. Например, в «Си++» и «Ява» поразрядным (побитовым) операциям НЕ, И, ИЛИ соответствуют операторы ~, &, | (сравните с операторами табл. 7).
В Бейсике используются только побитовые логические операции, а операнды представляются в восьми-, шестнадцати- или тридцатидвухразрядном дополнительном коде. При этом булевым значениям False и Тruе соответствуют десятичные значения 0 и -1, так, 0 – число, в котором все биты обнулены, а -1 – двоичное число, все биты которого установлены в 1 (см. табл. 3).
Операциям исключающее ИЛИ (неравнозначность), эквивалентность (равнозначность, ↔) и импликация (если то, →) в Бейсике соответствуют операторы XOR, EQV и IMP. Результат логической операции определяется поразрядно согласно таблице 8. Операторы приведены в порядке убывания их приоритета.
Таблица 8