- Логические операторы
- Таблица логических операторов в Java
- Таблица. Результаты выполнения логических операторов
- Сокращённые логические операторы
- Тип данных boolean и логические операторы — введение в Java 005 #
- Правда или ложь
- Boolean #
- Таблица истинности #
- Логические операторы, которые поддерживаются Java #
- Булева алгебра #
- Дизъюнкция #
- Конъюнкция #
- Антиваленц #
- Отрицание #
- Дополнительные материалы #
- Домашнее задание #
- Приписание логических true false к условиям
- Логические операторы в Java
- Где нужны логические операторы
- Как применять
- Полные и сокращённые версии AND и OR
- В чём разница
- Как использовать
- Порядок выполнения операторов
- Как изменить порядок вычисления
- Как логические операторы работают с целыми числами
- Как ^, | и & работают с целочисленными операндами
- Потренируемся: вычислим сами 3 & 5
Логические операторы
Логические операторы работают только с операндами типа boolean. Все логические операторы с двумя операндами объединяют два логических значения, образуя результирующее логическое значения. Не путайте с побитовыми логическими операторами.
Таблица логических операторов в Java
Оператор | Описание |
---|---|
& | Логическое AND (И) |
&& | Сокращённое AND |
| | Логическое OR (ИЛИ) |
|| | Сокращённое OR |
^ | Логическое XOR (исключающее OR (ИЛИ)) |
! | Логическое унарное NOT (НЕ) |
&= | AND с присваиванием |
|= | OR с присваиванием |
^= | XOR с присваиванием |
== | Равно |
!= | Не равно |
?: | Тернарный (троичный) условный оператор |
Логические операторы &, |, ^ действуют применительно к значениям типа boolean точно так же, как и по отношению к битам целочисленных значений. Логический оператор ! инвертирует (меняет на противоположный) булево состояние: !true == false и !false == true.
Таблица. Результаты выполнения логических операторов
A | B | A | B | A & B | A ^ B | !A |
---|---|---|---|---|---|
false | false | false | false | false | true |
true | false | true | false | true | false |
false | true | true | false | true | true |
true | true | true | true | false | false |
Сокращённые логические операторы
Кроме стандартных операторов AND (&) и OR (|) существуют сокращённые операторы && и ||.
Если взглянуть на таблицу, то видно, что результат выполнения оператора OR равен true, когда значение операнда A равно true, независимо от значения операнда B. Аналогично, результат выполнения оператора AND равен false, когда значение операнда A равно false, независимо от значения операнда B. Получается, что нам не нужно вычислять значение второго операнда, если результат можно определить уже по первому операнду. Это становится удобным в тех случаях, когда значение правого операнда зависит от значения левого.
Рассмотрим следующий пример. Допустим, мы ввели правило — кормить или не кормить кота в зависимости от числа пойманных мышек в неделю. Причём число мышек зависит от веса кота. Чем больше кот, тем больше он должен поймать мышей.
Если запустить программу, то пример будет работать без проблем — пять мышей в неделю вполне достаточно, чтобы побаловать кота вкусным завтраком. Если он поймает четырёх мышей, то начнутся проблемы с питанием кота, но не с программой — она будет работать, просто не будет выводить сообщение о разрешении покормить дармоеда.
Теперь возьмём крайний случай. Кот обленился и не поймал ни одной мышки. Значение переменной mouse будет равно 0, а в выражении есть оператор деления. А делить на 0 нельзя и наша программа закроется с ошибкой. Казалось бы, мы предусмотрели вариант с 0, но Java вычисляет оба выражения mouse != 0 и weight / mouse Реклама
Источник
Тип данных boolean и логические операторы — введение в Java 005 #
Правда или ложь
Boolean #
Boolean в Java — это логический тип данных. Переменная типа boolean может принимать всего два значения — это правда или ложь — true & false. Эти два значения обозначаются в других языках и часто выдаются на экран как 1 и 0, но всё же не равны этим значениям: например, выражение boolean b = 0; приведёт к ошибке при компиляции программы. Но мы можем сравнить переменные или выполнить логическую операцию с типом данных boolean:
Говоря о булевых или логических типах данных, нам придётся освежить свои воспоминания о булевой алгебре и возможных логических операциях.
Таблица истинности #
a | b | a & b | a I b | a ^ b | ! a |
---|---|---|---|---|---|
false | false | false | false | false | true |
false | true | false | true | true | true |
true | false | false | true | true | false |
true | true | true | true | false | false |
Давайте представим себе пример из жизни: мы ищем на сайте все статьи, которые мы опубликовали и комментировали. Должны быть два совпадения — это вариант a & b. Или мы ищем все статьи, в которых есть упоминание слов “алгебра” или “математика” — это a | b. А отыскать все статьи, которые написаны не нами, можно, применив логический оператор !a. Стать исключительно космонавтом или медиком — это a ^ b
Это так называемые булевы или логические операции. В интернете много материала по ключевым словам: таблица истинности, булева алгебра, теория множеств, конъюнкция, дизъюнкция.
С помощью таблицы с результатами логических операций можно перепроверить работу Java:
Надо понимать, что значение вашего чекбокса (галочки) на сайте Facebook при регистрации — “с правилами ознакомлен и согласен” — и есть значение булевой переменной в программе.
Логические операторы, которые поддерживаются Java #
Логический операторы | Значение |
---|---|
== | Проверка на соответствие (допустим, что a равен b) |
!= | Не равно (если a не равно b, то) |
! | Отрицание, логическое не |
& | Логическое И, and |
| | Логическое или, or |
^ | Исключительное или, XOR |
&& | Укороченный & |
|| | Укороченный или |
Амперсанд — это название знака &.
Карет (англ. caret) — это название знака ^.
Пайп (pipeline), Вертикальная черта — это название знака |.
Мы ещё раз рассмотрим данные операторы позже. Пока мы должны понимать, что с арифметическими операторами всё немного сложнее, чем хотелось бы.
Булева алгебра #
Булева алгебра, ударение на первый слог. БУлева.
Принципиально основы булевой алгебры не должны были давать в школе. Программисты учат её в институте.
Давайте я попробую на пальцах рассказать основы и то, что нам понадобится на минимальном уровне.
Дизъюнкция #
Когда мама ИЛИ папа дают мне деньги на карманные расходы, то я бегу и покупаю себе мороженное.
Знакомая ситуация, деньги можно получить в трёх случах из четырёх. В одном случае же деньги может дать и мама, и папа, тогда и друга можно угостить мороженным.
Дизъюнкция — логическое сложение, логическое ИЛИ, включающее или, просто “или”(англ. OR; нем. ODER) В Java операторы «|» и «||»
Пример в технике; дублирование выключателя или кнопки, дверной звонок и звонок у калитки вызывают одну и туже реакцию — включается мелодия звонка.
В учебниках можно встретить обозначение “больше либо равно единице” — =>1.
Конъюнкция #
Конъюнкция — логическое “И”, логическое умножение, просто “И”, “AND”, «&».
В Java оператор «&» и «&&».
Если светит солнце “И” у меня выходной, то я иду купаться на озеро.
Пример из жизни. Ядерный чемоданчик могут активировать только два офицера одновременно. По отдельности чемодан остаётся неактивным.
Антиваленц #
“XOR”, эксклюзивное или, “EOR”, “EXOR”. В Java оператор «^».
Только на горных лыжах в Австрии или на лошадях у бабушки в деревне я забываю про свою работу.
Или ты садишься за математику или я расскажу всё отцу.
ИЛИ — ИЛИ. Исключительное или.
Лампочка в больнице может работать от городского электричества или от дизельного генератора в подвале. Но не от двух источников одновременно.
В учебниках можно встретить обозначение “равно единице” — =1.
Отрицание #
Negation. NOT. В Java оператор «!».
Давайте представим огромный станок по продольной распилке леса. В цеху есть две кнопки. Зелёная и красная. При включении зелёной пила должна работать. При нажатии на красную пила должна остановится.
Дополнительные материалы #
- Булева алгебра — самое важное
- Булева алгебра
- Теория множеств
- Очень неплохая статья
- simulator — симулятор логических выражений в электротехнике. Очень помог мне в своё время вспомнить булеву алгебру.
Домашнее задание #
- Что выдаст программа, если запросить значения a, b, c, d, e, f?
- Посчитайте сначала в уме и проговорите вслух, что делает каждая строчка.
- Напишите программу и проверьте свои результаты.
- Сравните строчку вывода со своей:
- Повторение String: Найдите метод из официальной библиотеки и покажите его работу. По возможности используйте printf.
- Задача. Не для решения в Java, а для попытки понимания логических операций в уме.
Петя, Вася и Маша остались дома одни. Кто-то из них ел варенье. На вопрос мамы, кто это сделал, они сказали:- Петя: “Я не ел. Маша тоже не ела.”
- Вася: “Маша действительно не ела. Это сделал Петя”
- Маша: “Вася врет. Это он съел.”
Выясните, кто ел варенье, если известно, что двое из них оба раза сказали правду, а третий один раз соврал, а один раз сказал правду.
Источник
Приписание логических true false к условиям
Хочу написать программу принимающую возраст, чтоб при возрасте больше или равно 18 возвращала true, а при возрасте меньше 18 false, при значении возраста меньше 0, выводило выражение на экран.
Проблема в том, что я не знаю как приписать к определенному условию логическое значение.
Добавлено через 6 минут
Задание звучит так:
Создайте метод static boolean determineAdult(int age), который будет принимать возраст человека и возвращать логическое значение, равное true если он 18 и больше и false если он меньше 18, если переданное число меньше 0, метод должен вывести в консоль “Ошибка! Введите правильный возраст.” и вернуть false.
Требования:
1. Метод должен иметь модификатор static
2. Метод должен принимать в качестве параметра целое число
3. Метод должен возвращать логическое значение
Изменение логических значений true и false на 1 и 0
Доброго времени суток, уважаемые форумчане. Заранее извиняюсь за дурацкий вопрос, я просто новичок.
Видоизменить программу таким образом, чтобы вместо логических значений true и false отображались 1 и 0
Всем привет, учу JAVA, попалась задача : Попробуйте видоизменить программу таким образом, чтобы.
Выводит True за место False
Когда сравниваю выводит true за место False Matrix: Matrix: true import.
Источник
Логические операторы в Java
Знакомимся с каждым, узнаём про короткую и полную схемы вычислений. Проводим побитовые операции с целыми числами. Всё закрепляем на примерах.
Логические операции в Java возвращают значение типа boolean: true или false («правда» или «ложь»). Подробнее о булевом типе мы говорили здесь.
В языке Java есть шесть логических операторов. Первые четыре представлены в таблице ниже.
Логический оператор | Обозначение в Java | Выражение | Результат | ||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
«И» (AND): конъюнкция, логическое умножение | && | true && true false && true | true false | ||||||||||||||||||||||||||
Включающее «ИЛИ» (OR): дизъюнкция, логическое сложение | || | true || true false || true | true true | ||||||||||||||||||||||||||
Исключающее «ИЛИ» (XOR): строгая дизъюнкция, логическое вычитание | ^ | true ^ true false ^ true | false true | ||||||||||||||||||||||||||
«НЕ» (NOT): инверсия, отрицание | ! | !true !false | false Java-разработчик, преподаёт в Skillbox, осваивает машинное обучение. Где нужны логические операторыЕсли коротко, то в условных выражениях, которые могут включать в себя и операторы сравнения ( >, >=, ==, !=). При вычислении они возвращают значение булева типа. Условные выражения, в свою очередь, применяются в операторах ветвления ( if-else, switch, тернарном). Подробнее об этих операторах тут. Как применятьДопустим, мы хотим проверить, что значение переменной a больше значений в переменных b и c. То есть сравнить операнд a с двумя другими. Нам поможет логический оператор && (И). Логический оператор && (И) возвращает true, если слева и справа от него стоят значения true, а иначе — false. Иными словами, если оба логических высказывания истинны, то и операция && (И) возвращает истину. Как вычисляется значение выражения (a > b) && (a > c): Сначала проверяется условие ( a > b). Оно вернёт true, так как 6 больше 4. Далее проверяется условие ( a > c), которое также вернёт true, ведь 6 больше 3. Теперь у нас с двух сторон от логического оператора && стоят значения true. По определению выше или по таблице ещё выше, результат вычисления логического выражения ( true && true) равен true. Результат операции ( a > b) вернёт true, так как 6 больше 4, а операция ( a > c) уже вернёт false, так как 6 не больше 7. Значит, слева от логического оператора && стоит true, а справа — false. Следовательно, результат вычисления логического выражения (мы присвоили его булевой переменной d) будет false. Результат операции сравнения ( a > b) равен false, а что вернёт операция ( a > c), уже значения не имеет (смотрите определение выше) — результат вычисления логического выражения (мы присвоили его булевой переменной d) будет равен false. Рассмотрим примеры с другими операторами. Значение переменной d равно true. Теперь вычисляйте вы. Значение d равно false. О практическом применении XOR читайте здесь. Значение d стало true. Полные и сокращённые версии AND и OR&& и || называются сокращёнными логическими операторами AND и OR соответственно, или операторами короткой схемы вычислений. В спецификации Java их ещё зовут условными. Значения их операндов могут быть только булева типа. В отличие от двойных, одиночные & и | называются операторами полной схемы вычислений. Значения их операндов могут быть как только булевыми, так и только целочисленными (вместе с оператором ^ они используются в побитовых операциях). В чём разницаВ том, что для операторов & и | всегда вычисляются значения обоих операндов, а при работе операторов && и || второй операнд вычисляется только по необходимости. То есть иногда результат выражения однозначно определён уже по первому операнду:
&& и || используют как операторы булевой логики. Они оперируют значениями только булева типа и применяются только в логических выражениях. Как использовать&& и || позволяют экономить вычисления (применять короткую схему) и помогают избегать ошибок. Как это делается? Начнём с оператора &&. Приведём фрагмент из таблицы выше:
|