Основные логические операции. AND, NOT, OR и XOR (исключающее или)
В этой статье мы поговорим о некоторых битовых операциях. Рассмотрим основные из них: XOR (исключающее ИЛИ), AND (И), NOT (НЕ) а также OR (ИЛИ).
Как известно, минимальной единицей измерения информации является бит, который хранит одно из 2-х значений: 0 (False, ложь) либо 1 (True, истина). Таким образом, битовая ячейка может одновременно находиться лишь в одном из двух возможных состояний.
Для манипуляций с битами используют определённые операции — логические или булевые. Они могут применяться к любому биту, вне зависимости от того, какое у него значение — ноль или единица. Что же, давайте посмотрим на примеры использования трёх основных логических операций.
Логическая операция AND (и)
AND обозначается знаком & .
Оператор AND выполняется с 2-мя битами, возьмём, к примеру, a и b. Результат выполнения операции AND равен 1, если a и b равняются 1. В остальных случаях результат равен 0. Например, с помощью AND вы можете узнать, чётное число или нет.
Посмотрите на таблицу истинности операции AND:

Логическая операция OR (ИЛИ)
Оператор OR также выполняется с 2-мя битами (a и b). Результат равен 0, если a и b равны 0, иначе он равен 1. Смотрим таблицу истинности.

Логическая операция XOR (исключающее ИЛИ)
Оператор XOR обозначается ^ .
XOR выполняется с 2-мя битами (a и b). Результат выполнения операции XOR (исключающее ИЛИ) равен 1, когда один из битов b или a равен 1. В остальных ситуациях результат применения оператора XOR равен 0.
Таблица истинности логической операции для XOR (исключающее ИЛИ) выглядит так:

Используя XOR (исключающее ИЛИ), вы можете поменять значения 2-х переменных одинакового типа данных, не используя временную переменную. А ещё, посредством XOR можно зашифровать текст, например:
String msg = «This is a message»; char[] message = msg.toCharArray(); String key = «.*)»; String encryptedString = new String(); for(int i = 0; i
Согласен, XOR — далеко не самый надёжный метод шифрования, но это не значит, что его нельзя сделать частью какого-либо шифровального алгоритма.
Логическая операция NOT (НЕ)
Это побитовое отрицание, поэтому выполняется с одним битом и обозначается ~ .
Результат зависит от состояния бита. Если он в нулевом состоянии, то итог операции — единица и наоборот. Всё предельно просто.

Эти 4 логические операции следует запомнить в первую очередь, т. к. с их помощью можно получить практически любой возможный результат. Также существуют такие операции, как > (побитовый сдвиг вправо).
Логические операторы — Основы JavaScript
Логические выражения могут объединяться друг с другом, создавая все более хитрые проверки. Хороший пример: проверка пароля. Как вы знаете, некоторые сайты при регистрации хотят пароль от 8 до 20 символов в длину. Честно говоря, это странное ограничение, но что поделать. В математике мы бы написали 8 < x < 20 (где x это длина конкретного пароля), но в JavaScript такой трюк не пройдет. Нам придется сделать два отдельных логических выражения и соединить их специальным оператором «И»:
Вот функция, которая принимает пароль и говорит, соответствует ли он условиям, или не соответствует:
const isStrongPassword = (password) => const length = password.length; return length > 8 && length 20; >; isStrongPassword('qwerty'); // false isStrongPassword('qwerty1234'); // true isStrongPassword('zxcvbnmasdfghjkqwertyui'); // false
&& — означает «И» (в математической логике это называют конъюнкцией). Все выражение считается истинным только в том случае, когда истинен каждый операнд — каждое из составных выражений. Иными словами, && означает «и то, и другое».
Приоритет этого оператора ниже, чем приоритет операторов сравнения, поэтому выражение отрабатывает правильно без скобок.
Кроме && , часто используется оператор || — «ИЛИ» (дизъюнкция). Он означает «или то, или другое, или оба». Операторы можно комбинировать в любом количестве и любой последовательности, но когда одновременно встречаются && и || , то приоритет лучше задавать скобками. Ниже пример расширенной функции определения корректности пароля:
const hasSpecialChars = (str) => /* проверяет содержание специальных символов в строке */; const hasCapitalChars = (str) => /* проверяет содержание заглавных букв в строке */; const isStrongPassword = (password) => const length = password.length; // Скобки задают приоритет. Понятно что к чему относится. return length > 8 && (hasSpecialChars(password) || hasCapitalChars(password)); >;
Другой пример. Мы хотим купить квартиру, которая удовлетворяет условиям: площадь от 100 кв. метров и больше на любой улице ИЛИ площадь от 80 кв. метров и больше, но на центральной улице Main Street .
Напишем функцию, проверяющую квартиру. Она принимает два аргумента: площадь (число) и название улицы (строку):
const isGoodApartment = (area, street) => // Через переменную, чтобы функция была не слишком длинной const result = area >= 100 || (area >= 80 && street === 'Main Street'); return result; >; isGoodApartment(91, 'Queens Street'); // false isGoodApartment(78, 'Queens Street'); // false isGoodApartment(70, 'Main Street'); // false isGoodApartment(120, 'Queens Street'); // true isGoodApartment(120, 'Main Street'); // true isGoodApartment(80, 'Main Street'); // true
Область математики, в которой изучаются логические операторы, называется булевой алгеброй. Ниже показаны «таблицы истинности» — по ним можно определить, каким будет результат применения оператора:
И &&
| A | B | A && B |
|---|---|---|
| TRUE | TRUE | TRUE |
| TRUE | FALSE | FALSE |
| FALSE | TRUE | FALSE |
| FALSE | FALSE | FALSE |
// true && true; 3 > 2 && 'wow'.startsWith('w'); // true // true && false; 'start' === 'start' && 8 3; // false
ИЛИ ||
| A | B | A || B |
|---|---|---|
| TRUE | TRUE | TRUE |
| TRUE | FALSE | TRUE |
| FALSE | TRUE | TRUE |
| FALSE | FALSE | FALSE |
// false || true; 3 2 || 'wow'.startsWith('w'); // true // false || false; 'start' === 'Start' || 3 3; // false
Отрицание
Наряду с конъюнкцией (И) и дизъюнкцией (ИЛИ), часто используется операция «отрицание». Отрицание меняет логическое значение на противоположное. В программировании ему соответствует унарный оператор ! .
Если есть функция, проверяющая четность числа, то с помощью отрицания можно выполнить проверку нечетности:
const isEven = (number) => number % 2 === 0; isEven(10); // true !isEven(10); // false
То есть мы просто добавили ! слева от вызова функции и получили обратное действие.
Отрицание — мощный инструмент, который позволяет лаконично выражать задуманные правила в коде без необходимости писать новые функции.
А что если написать так !!isEven(10) ? Внезапно, но код сработает. В логике двойное отрицание подобно отсутствию отрицания вообще.
isEven(10); // true !isEven(10); // false !!isEven(10); // true
Дополнительные материалы
- Булева алгебра
- Конъюнкция
- Дизъюнкция
- Законы Де Моргана
![]()
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты
Об обучении на Хекслете
- Статья «Как учиться и справляться с негативными мыслями»
- Статья «Ловушки обучения»
- Статья «Сложные простые задачи по программированию»
- Урок «Как эффективно учиться на Хекслете»
- Вебинар « Как самостоятельно учиться »
Открыть доступ
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно
- 130 курсов, 2000+ часов теории
- 1000 практических заданий в браузере
- 360 000 студентов
Наши выпускники работают в компаниях:
Логическое И (&&)
Логический оператор И ( && ) (конъюнкция) для набора операндов со значением типа Boolean будет true только в случае, если все операнды содержат значение true . В противном случае это будет false .
В целом, оператор вернёт значение первого ложноподобного операнда при вычислении, либо значение последнего операнда, если все операнды оказались истиноподобными.
Интерактивный пример
Синтаксис
Описание
Если значение может быть преобразовано в true , то оно рассматривается как истиноподобное (truthy). Если же значение может быть преобразовано в false , то оно называется ложноподобным (falsy).
Примеры выражений, которые могут быть преобразованы в false :
- false ;
- null ;
- NaN ;
- 0 ;
- пустая строка ( «» , » , « );
- undefined .
Оператор И возвращает небулевы значения как есть:
= "" && "foo"; // result is assigned "" (empty string) result = 2 && 0; // result is assigned 0 result = "foo" && 4; // result is assigned 4
Несмотря на то, что оператор && может использоваться с операндами, не содержащие логических значений, он всё равно останется булевым оператором, поскольку его возвращаемое значение всегда можно преобразовать в булевый примитив. Чтобы явно преобразовать возвращаемое значение этого оператора (или вообще любое выражение) в соответствующее значение булевого типа, используйте двойной оператор НЕ или конструктор Boolean (en-US).
Сокращённое вычисление
Оператор логического И вычисляет выражение по сокращённой схеме. Каждый операнд приводится к булевому значению, если результат одного преобразования оказывается false , тогда оператор И останавливает дальнейшее вычисление выражения и возвращает исходное значение этого ложноподобного операнда. Поэтому оставшиеся операнды не будут вычислены.
В качестве примера рассмотрим следующий псевдокод.
(ложноподобное выражение) && следующее выражение
Поскольку первый операнд (ложноподобное выражение) имеет ложное значение, то следующее выражение никогда не будет вычислено. Если следующее выражение содержало функцию, то она бы никогда не была вызвана. Посмотрите пример ниже:
function A() console.log("вызвана функция A"); return false; > function B() console.log("вызвана функция B"); return true; > console.log(A() && B()); // В результате вызова функции A, в консоли будет выведено "вызвана функция A", // а оператор && вычислится как false (функция A возвращает false), поэтому далее в консоли появится false; // вследствие этого оператор И прекратит вычисление и проигнорирует функцию B
Приоритет операторов
Оператор И имеет более высокий приоритет, чем оператор ИЛИ, поэтому оператор && выполнится раньше оператора || (см. приоритет операторов).
false || (true && true); // вернёт true true && (false || false); // вернёт false 2 == 3 || (4 0 && 1 == 1); // вернёт false
Примеры
Использование оператора И
В следующем коде показаны примеры использования оператора && (логическое И).
= true && true; // t && t вернёт true a2 = true && false; // t && f вернёт false a3 = false && true; // f && t вернёт false a4 = false && 3 == 4; // f && f вернёт false a5 = "Cat" && "Dog"; // t && t вернёт "Dog" a6 = false && "Cat"; // f && t вернёт false a7 = "Cat" && false; // t && f вернёт false a8 = "" && false; // f && f вернёт "" a9 = false && ""; // f && f вернёт false
Правила преобразования булевых значений
Конвертация И к ИЛИ
Следующая операция с булевыми значениями:
!(!bCondition1 || !bCondition2);
Конвертация ИЛИ к И
Следующая операция с булевыми значениями:
|| bCondition2;
!(!bCondition1 && !bCondition2);
Удаление вложенных круглых скобок
Поскольку логические выражения вычисляются слева направо, всегда можно удалить круглые скобки из сложного выражения при условии соблюдения определенных правил.
Следующая составная операция с булевыми значениями:
|| (bCondition2 && bCondition3);
это то же самое, что и:
|| (bCondition2 && bCondition3);
Спецификации
| Specification |
|---|
| ECMAScript Language Specification # prod-LogicalANDExpression |
Поддержка браузерами
BCD tables only load in the browser
Смотрите также
Found a content problem with this page?
- Edit the page on GitHub.
- Report the content issue.
- View the source on GitHub.
This page was last modified on 10 авг. 2023 г. by MDN contributors.
Your blueprint for a better internet.
MDN
Support
- Product help
- Report an issue
Our communities
Developers
- Web Technologies
- Learn Web Development
- MDN Plus
- Hacks Blog
- Website Privacy Notice
- Cookies
- Legal
- Community Participation Guidelines
Visit Mozilla Corporation’s not-for-profit parent, the Mozilla Foundation.
Portions of this content are ©1998– 2023 by individual mozilla.org contributors. Content available under a Creative Commons license.
Логические операторы — Основы Java
Мы уже умеем писать методы, которые проверяют одиночные условия. В этом уроке мы продолжим работу с методами и научимся строить составные условия.
Такие навыки пригождаются в довольно распространенных задачах — например, при проверке пароля. Как вы знаете, некоторые сайты при регистрации просят придумать пароль от 8 до 20 символов в длину.
Напишем метод, который принимает пароль и говорит, соответствует ли он условиям:
// Пароль длиннее 8 символов **И** пароль короче 20 символов public static boolean isCorrectPassword(String password) var length = password.length(); return length > 8 && length 20; > isCorrectPassword("qwerty"); // false isCorrectPassword("qwerty1234"); // true
Оператор && означает «И». В этом случае выражение считается истинным, только если истинен каждый операнд — каждое из составных выражений. Другими словами, && означает «и то, и другое».
Приоритет этого оператора ниже, чем приоритет операторов сравнения, поэтому выражение отрабатывает правильно без скобок.
Кроме && часто используется оператор || — «ИЛИ». Он означает «или то, или другое, или оба». Операторы можно комбинировать в любом количестве и любой последовательности. Единственное исключение — когда одновременно встречаются && и || , то приоритет лучше задавать скобками:
a && b || c; // Без скобок сложно понять приоритет a && (b || c) // Приоритет очевиден
Рассмотрим еще один пример. Представим, что мы хотим купить квартиру, которая удовлетворяет таким условиям:
Больше 100 м 2 на любой улице ИЛИ больше 80 м 2 на центральной улице Main Street
Напишем метод, проверяющий квартиру. Он принимает два параметра: площадь и название улицы:
isGoodApartment(91, "Queens Street"); // false isGoodApartment(78, "Queens Street"); // false isGoodApartment(70, "Main Street"); // false isGoodApartment(120, "Queens Street"); // true isGoodApartment(120, "Main Street"); // true isGoodApartment(80, "Main Street"); // true public static boolean isGoodApartment(int area, String street) return area >= 100 || (area >= 80 && "Main Street".equals(street)); >
Область математики, в которой изучаются логические операторы, называется булевой алгеброй. Ниже показаны «таблицы истинности» — по ним можно определить, каким будет результат применения оператора:
Оператор И &&
| A | B | A && B |
|---|---|---|
| TRUE | TRUE | TRUE |
| TRUE | FALSE | FALSE |
| FALSE | TRUE | FALSE |
| FALSE | FALSE | FALSE |
Оператор ИЛИ ||
| A | B | A ❘❘ B |
|---|---|---|
| TRUE | TRUE | TRUE |
| TRUE | FALSE | TRUE |
| FALSE | TRUE | TRUE |
| FALSE | FALSE | FALSE |
Отрицание
Наряду с конъюнкцией (И) и дизъюнкцией (ИЛИ), часто используется операция «отрицание».
Отрицание меняет логическое значение на противоположное. В программировании ему соответствует оператор ! . Если есть метод, проверяющий четность числа, то с помощью отрицания можно выполнить проверку нечетности:
public static boolean isEven(int number) return number % 2 == 0; > isEven(10); // true !isEven(10); // false
То есть мы просто добавили ! слева от вызова метода и получили обратное действие. Отрицание можно применять не только к вызову метода, но и к целому выражению:
!(x == 5 || x == 3) // Это же выражение можно записать и по-другому: // x не равен 5 и не равен 3 x != 5 && x != 3
Отрицание — мощный инструмент, который позволяет лаконично выражать задуманные правила в коде без необходимости писать новые методы.
Дополнительные материалы
- Булева алгебра
- Конъюнкция
- Дизъюнкция
- Законы Де Моргана
![]()
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты
Об обучении на Хекслете
- Статья «Как учиться и справляться с негативными мыслями»
- Статья «Ловушки обучения»
- Статья «Сложные простые задачи по программированию»
- Урок «Как эффективно учиться на Хекслете»
- Вебинар « Как самостоятельно учиться »
Открыть доступ
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно
- 130 курсов, 2000+ часов теории
- 1000 практических заданий в браузере
- 360 000 студентов
Наши выпускники работают в компаниях: