Операторы отношения и логические операторы
Вы здесь: Главная >> Java-учебник >> Операторы отношения и логические операторы
Язык Java содержит полный комплект операторов отношения. Чтобы проверить равенство, следует использовать символы = =. Например, значение выражения 3 = = 7 равно false.
Для проверки неравенства используются символы ! = .
Так, значение выражения 3 != 7 равно true.
Кроме того, в языке Java есть обычные операторы < (меньше), > (больше), <= (меньше или равно) и => (больше или равно).
Java, как и язык C++, использует символы для обозначения логического оператора «и», а также символы | | для обозначения логического оператора «или» . Как обычно, знак восклицания означает логический оператор отрицания . Операторы && и | | вычисляются по сокращенной схеме, т.е. если в ходе вычисления выражения А && В выясняется, что подвыражение А ложно, то подвыражение В не вычисляется.
Например, в выражении
х != 0 && 1/х > х+у // Не делить на 0.
вторая часть никогда не вычисляется, если значение переменной х равно нулю.
Таким образом, подвыражение 1/х не вычисляется, если х равно нулю и деления на нуль не происходит.
Аналогично, если оказывается, что выражение А истинно, то значение выражения А | | В автоматически становится истинным, и вычислять выражение В нет необходимости.
В языке Java есть также тернарный оператор ? :, который иногда оказывается полезным. Выражение
условие ? e1 : е2
означает, что если условие истинно, то вычисляется выражение e1, а если ложно — е2.
Например, выражение
х < у ? х : у
вычисляет меньшее из чисел х и y.
Побитовые операторы
Работая с любыми целочисленными типами, можно применять операторы, имеющие дело непосредственно с битами, из которых состоят целые числа. Это значит, что для получения отдельных битов числа можно использовать технику масок.
В языке Java есть следующие побитовые операторы:
S («и») | {«или») ^ («исключающее или») ~(«не»)
Эти операторы работают с битами.
Например, если n — это целое число, то выражение
int fourthBitFromRight = (n & 8) /8;
равно единице, если четвертый бит справа в двоичном представлении числа n равен единице, и нуль, если нет.
Используя оператор & с соответствующей степенью двойки, можно замаскировать все биты, кроме одного.
Операторы & и | применяются к булевским переменным и вычисляют булевские значения.
Эти операторы аналогичны операторам && и | |, за исключением того, что побитовые операторы не вычисляются по сокращенной схеме, т.е. перед вычислением результата вычисляются оба аргумента.
В языке Java есть также операторы >> и <<, сдвигающие битовое представление числа вправо или влево. Эти операторы часто оказываются удобными, если нужно построить битовое представление на основе маски: int fourthBitFromRight = (n s (1 « 3)) » 3;
В языке есть даже оператор >>>, заполняющий старшие разряды нулями, в то время как оператор » приписывает знаковый бит к старшим разрядам.
Оператора <« в языке Java нет.
Аргумент, стоящий в правой части операторов побитового сдвига, сокращается по модулю 32 (если левая часть является числом типа long, правая часть сокращается по модулю 64).
Например, значение выражения 1«35 эквивалентно выражению 1 <<3, или 8.
В языках C/C++ не фиксируется, какой сдвиг выполняет оператор >> : арифметический (вплоть до знакового бита) или логический (заполняя свободные разряды нулями).
Разработчики средств реализации языка могут выбрать тот вариант, который покажется им более эффективным. Это значит, что оператор >> в языке C/C++ в действительности лишь определяет некое неотрицательное число.
Язык Java снимает эту неопределенность.
Сергей Владимирцев
28.01.2011
Основные операторы Java — Мегаобучалка
Все операторы Java можно разделить на четыре группы: арифметические, логические, побитовые и сравнения. Рассмотрим последовательно каждую группу операторов.
Начнем с арифметических. Эти операторы перечислены в табл. 1.2
Таблица 1.2. Арифметические операторы Java
| Оператор | Название | Пояснение |
| + | Сложение | Бинарный оператор. Результатом команды a+b является сумма значений переменных a и b |
| - | Вычитание | Бинарный оператор. Результатом команды a-b является разность значений переменных a и b |
| * | Умножение | Бинарный оператор. Результатом команды a*b является произведение значений переменных a и b |
| / | Деление | Бинарный оператор. Результатом команды a/b является частное от деления значений переменных a и b. Для целочисленных операндов по умолчанию выполняется деление нацело |
| % | Остаток | Бинарный оператор. Результатом команды a%b является остаток от целочисленного деления значений переменных a и b
|
| += | Сложение (упрощенная форма с присваиванием) | Упрощенная форма оператора сложения с присваиванием. Команда a+=b является эквивалентом команды a=a+b |
| -= | Вычитание (упрощенная форма с присваиванием) | Упрощенная форма оператора вычитания с присваиванием. Команда a-=b является эквивалентом команды a=a-b |
| *= | Умножение (упрощенная форма с присваиванием) | Упрощенная форма оператора умножения с присваиванием. Команда a*=b является эквивалентом команды a=a*b |
| /= | Деление (упрощенная форма с присваиванием) | Упрощенная форма оператора деления с присваиванием. Команда a/=b является эквивалентом команды a=a/b |
| %= | Остаток (упрощенная форма) | Упрощенная форма оператора вычисления остатка с присваиванием. Команда a%=b является эквивалентом команды a=a%b
|
| ++ | Инкремент | Унарный оператор. Команда a++ (или ++a) является эквивалентом команды a=a+1 |
| — | Декремент | Унарный оператор. Команда a— (или —a) является эквивалентом команды a=a-1 |
Эти операторы имеют некоторые особенности. В первую очередь обращаем внимание на оператор деления /. Если операндами являются целые числа, в качестве значения возвращается результат целочисленного деления. Рассмотрим последовательность команд:
int a=5,b=2; double x=a/b;
В данном примере переменная x получает значение 2.0, а не 2.5, как можно было бы ожидать. Дело в том, что сначала вычисляется выражение a/b. Поскольку операнды целочисленные, выполняется целочисленное деление. И только после этого полученное значение преобразуется к формату double и присваивается переменной x.
Для того чтобы при целочисленных операндах выполнялось обычное деление, перед выражением с оператором деления указывается в круглых скобках идентификатор типа double (или float).![]()
int a=5,b=2;
double x=(double)a/b;
Теперь значение переменной x равно 2.5.
В Java, как и в С++, есть группа упрощенных арифметических операторов с присваиванием. Если op — один из операторов сложения, умножения, деления и вычисления остатка, то упрощенная форма этого оператора с присваиванием имеет вид op=. Это тоже бинарный оператор, как и оператор op, а команда вида x op=y является эквивалентом команды x=x op y.
Еще два исключительно полезных унарных оператора — операторы инкремента (++) и декремента (—). Действие оператора декремента сводится к увеличению на единицу значения операнда, а оператор декремента на единицу уменьшает операнд. Другими словами, команда x++ эквивалентна команде x=x+1, а команда x— эквивалентна команде x=x-1. У операторов инкремента и декремента есть не только представленная здесь постфиксная форма (оператор следует после операнда: x++ или x—), но и префиксная (оператор располагается перед операндом: ++x или —x).![]()
int n,m;
n=10;
m=n++;
В этом случае после выполнения команд переменная n будет иметь значение 11, а переменная m — значение 10. На момент выполнения команды m=n++ значение переменной n равно 10. Поскольку в команде m=n++ использована постфиксная форма оператора инкремента, то сначала выполняется присваивание значения переменной m, а после этого значение переменной n увеличивается на единицу.
Иной результат выполнения следующих команд:
int n,m;
n=10;
m=++n;
Обе переменные (n и m) в этом случае имеют значение 11.
Поскольку в команде m=++n использована префиксная форма инкремента, сначала на единицу увеличивается значение переменной n, а после этого значение переменной n присваивается переменной m.
Следующую группу образуют логические операторы. Операндами логических операторов являются переменные и литералы типа boolean. Логические операторы Java перечислены в табл. 1.3.
Таблица 1.3. Логические операторы Java
| Оператор | Название | Пояснение |
| & | Логическое И | Бинарный оператор. Результатом операции A&B является true, если значения обоих операндов равны true. В противном случае возвращается значение false |
| && | Сокращенное логическое И | Бинарный оператор. Особенность оператора, по сравнению с оператором &, состоит в том, что если значение первого операнда равно false, то значение второго операнда не проверяется |
| | | Логическое ИЛИ | Бинарный оператор. B является true, если значение одного и только одного операнда равно true. В противном случае возвращается значение false
|
| ! | Логическое отрицание | Унарный оператор. Результатом команды !A является true, если значение операнда A равно false. Если значение операнда A равно true, результатом команды !A является значение false |
Логические операторы обычно используются в качестве условий в условных операторах и операторах цикла.
В табл. 1.4 перечислены операторы сравнения, используемые в Java.
Таблица 1.4. Операторы сравнения Java
| Оператор | Название | Пояснение |
| = = | Равно | Результатом операции A= =B является значения true, если операнды A и B имеют одинаковые значения. В противном случае значением является false |
| Оператор | Название | Пояснение |
| < | Меньше | Результатом операции A<B является значения true, если значение операнда A меньше значения операнда B.![]() |
| <= | Меньше или равно | Результатом операции A<=B является значения true, если значение операнда A не больше значения операнда B. В противном случае значением является false |
| > | Больше | Результатом операции A>B является значения true, если значение операнда A больше значения операнда B. В противном случае значением является false |
| >= | Больше или равно | Результатом операции A>=B является значения true, если значение операнда A не меньше значения операнда B. В противном случае значением является false |
| ! = | Не равно | Результатом операции A!=B является значения true, если операнды A и B имеют разные значения. В противном случае значением является false |
Операторы сравнения обычно используются совместно с логическими операторами.
Для понимания принципов работы поразрядных операторов необходимо иметь хотя бы элементарные познания о двоичном представлении чисел. Напомним читателю некоторые основные моменты.
В двоичном представлении позиционная запись числа содержит нули и единицы.
Старший бит (самый первый слева) определяет знак числа. Для положительных чисел старший бит равен нулю, для отрицательных — единице.
Перевод из двоичной системы счисления положительного числа с позиционной записью bnbn-1…b2b1b0 (bi могут принимать значения 0 или 1, старший бит для положительных чисел bn = 0) в десятичную выполняется так:
b020 + b121 + b222 +… + bn-12n-1 + bn2n .
Для перевода отрицательного двоичного числа в десятичное представление производится побитовое инвертирование кода (об операции побитового инвертирования — см.
далее), полученное двоичное число переводится в десятичную систему, к нему прибавляется единица (и добавляется знак минус).
Для перевода отрицательного числа из десятичной в двоичную систему от модуля числа отнимают единицу, результат переводят в бинарный код и затем этот код инвертируют.
Умножение числа на два эквивалентно сдвигу влево на один бит позиционной записи числа (с заполнением первого бита нулем).
Побитовые операторы Java описаны в табл. 1.5.
Таблица 1.5. Побитовые операторы Java
| Оператор | Название | Пояснение | ||
| & | Побитовое И | Бинарный оператор. Логическая операция И применяется к каждой паре битов операндов. Результатом является 1, если каждый из двух сравниваемых битов равен 1. В противном случае результат равен 0 | ||
| | | Побитовое ИЛИ | Бинарный оператор. Логическая операция ИЛИ применяется к каждой паре битов операндов.
| Побитовое ИСКЛЮЧАЮЩЕЕ ИЛИ | Бинарный оператор. Логическая операция ИСКЛЮЧАЮЩЕЕ ИЛИ применяется к каждой паре битов операндов. Результатом является 1, если один и только один из двух сравниваемых битов равен 1. В противном случае результат равен 0 |
| ~ | Побитовое отрицание | Унарный оператор. Выполняется инверсия двоичного кода: 0 меняется на 1, а 1 меняется на 0 | ||
| >> | Сдвиг вправо | Бинарный оператор. Результатом является число, получаемое сдвигом вправо в позиционном представлении первого операнда (слева от оператора) на количество битов, определяемых вторым операндом (справа от оператора). Исходное значение первого операнда при этом не меняется. Младшие биты теряются, а старшие заполняются дублированием знакового бита | ||
| << | Сдвиг влево | Бинарный оператор. Результатом является число, получаемое сдвигом влево в позиционном представлении первого операнда (слева от оператора) на количество битов, определяемых вторым операндом (справа от оператора). Исходное значение первого операнда при этом не меняется. Младшие биты заполняются нулями, а старшие теряются
| ||
| >>> | Беззнаковый сдвиг вправо | Бинарный оператор. Результатом является число, получаемое сдвигом вправо в позиционном представлении первого операнда (слева от оператора) на количество битов, определяемых вторым операндом (справа от оператора). Исходное значение первого операнда при этом не меняется. Младшие биты теряются, а старшие заполняются нулями | ||
| &= | Упрощенная форма побитового оператора & с присваиванием | Команда вида A&=B является эквивалентом команды A=A&B | ||
| |= | Упрощенная форма побитового оператора | с присваиванием | Команда вида A|=B является эквивалентом команды A=A|B |
| Оператор | Название | Пояснение |
| ^= | Упрощенная форма побито-вого оператора ^ с присваиванием | Команда вида A^=Bявляется эквивалентом команды A=A^B |
| >>= | Упрощенная форма побитово-го оператора >> с присваиванием | Команда вида A>>=Bявляется эквивалентом команды A=A>>B |
| <<= | Упрощенная форма побитово-го оператора << с присваиванием | Команда вида A<<=Bявляется эквивалентом команды A=A<<B |
| >>>= | Упрощенная форма побитово-го оператора >>> с присваиванием | Команда вида A>>>=Bявляется эквивалентом команды A=A>>>B |
За редким исключением, побитовые операции используются в случаях, когда необходимо оптимизировать программу в отношении быстродействия.
Помимо перечисленных операторов, в Java есть единственный тернарный оператор (у оператора три операнда). Формально оператор обозначается как ?:. Синтаксис вызова этого оператора следующий:
условие?значение_1:значение_2
Первым операндом указывается условие — выражение, возвращающее в качестве значения логическое значение. Если значение выражения-условия равно true, в качестве значения тернарным оператором возвращается значение_1. Если значением выражения-условия является false, тернарным оператором в качестве значения возвращается значение_2.
Несколько замечаний по поводу оператора присваивания (оператор =). В Java оператор присваивания возвращает значение. Команда вида x=y выполняется следующим образом. Сначала вычисляется выражение y, после чего это выражение приводится к типу переменной x и затем записывается в эту переменную. Благодаря тому, что, в отличие от других операторов с равными приоритетами, присваивание выполняется справа налево, в Java допустимыми являются команды вида x=y=z.
В этом случае значение переменной z присваивается сначала переменной y, а затем значение переменной y присваивается переменной x.
Еще одно замечание касается упрощенных форм операторов с присваиванием, то есть операторов вида op=. Хотя утверждалось, что команда вида A op=B эквивалента команде A=A op B, это не совсем так. При выполнении команды вида A op=B сначала вычисляется выражение A op B, затем полученное значение приводится к типу переменной A и только после этого присваивается переменной A. Поскольку приведение к типу переменной A выполняется, фактически, явно, а в команде A=A op B приведение типов неявное, может проявиться разница в использовании полной и упрощенной форм команд присваивания. Рассмотрим простой пример:
byte a=10,b=20;
// Правильно:
a+=20;
// Неправильно:
a=a+b;
В данном случае команда a+=20 является корректной, а команда a=a+b — нет. В первом случае литерал 20 типа int «насильственно» приводится к типу byte в силу особенностей оператора +=.
Во втором случае результат вычисления выражения a+b автоматически расширяется до типа int, а автоматическое приведение типа int к типу byte запрещено.
Напоследок приведем в табл. 1.6 данные о приоритете различных операторов в Java.
Таблица 1.6. Приоритеты операторов в Java
| Приоритет | Операторы |
| Круглые скобки ( ), квадратные скобки [ ] и оператор «точка» | |
| Инкремент ++, декремент —, отрицания ~ и ! | |
| Умножение *, деление / и вычисление остатка % | |
| Сложение + и вычитание - | |
| Побитовые сдвиги >>, << и >>> | |
| Больше >, больше или равно >=, меньше или равно <= и меньше < | |
| Равно = = и неравно ! = | |
| Побитовое И & | |
| Побитовое исключающее ИЛИ ^ | |
| Побитовое ИЛИ | | |
| Логическое И && | |
| Логические ИЛИ || | |
| Тернарный оператор ?: | |
| Присваивание = и сокращенные формы операторов вида op= |
Операторы равных приоритетов (за исключением присваивания) выполняются слева направо.
В случаях когда возникают сомнения в приоритете операторов и последовательности вычисления выражений, рекомендуется использовать круглые скобки.
Примеры программ
Далее рассмотрим некоторые задачи, которые иллюстрируют возможности Java и специфику синтаксиса этого языка.
Логические и логические операторы короткого замыкания в Java на примере
- Таблица логических и логических операторов Java
- Логические операторы Java (короткое замыкание)
- Логическое И (&&)
- Логическое ИЛИ (||)
- Булевы операторы Java (без короткого замыкания)
- Логическое И (&)
- Логическое ИЛИ (|) 9)
- Логическое НЕ (!)
- Логические операторы Java (короткое замыкание)
- Ссылки
Когда два или более реляционных выражения участвуют в операторе принятия решения, они объединяются логическими операторами.
Логические операторы бывают двух видов: короткое замыкание и не короткое замыкание . Они оба работают с логическими значениями и оценивают логические значения. Операторы короткого замыкания называются логическими операторами, а операторы без короткого замыкания называются логическими операторами.
Оба оператора с коротким замыканием и без короткого замыкания выполняют логические операции над булевыми выражениями, но между их стилями работы есть разница — логические операторы короткого замыкания оценивают второе выражение только в том случае, если это необходимо. Например, если вы хотите выполнить логическое И между expr-1 и expr-2 и если expr-1 дает false , то независимо от того, что возвращает expr-2 ; окончательный результат будет false . В этом случае expr-2 ; если оставить невыполненным, это не повлияет на окончательный результат операции И.
Это делает операцию быстрее. Наоборот, логическая операция без короткого замыкания выполняет все булевы выражения, данные для выполнения.
Например, если A и B являются двумя булевыми выражениями, то к выражениям A и B можно применить следующие логические операторы Java.
| Операция | Описание | Тип | ||
|---|---|---|---|---|
| А и Б | логическое И | короткое замыкание | ||
| А || Б | логическое ИЛИ | короткое замыкание | 9Блогическое исключающее ИЛИ | |
| !А | логический НЕ |
Логические операторы короткого замыкания эффективны и безопасны в использовании, поэтому мы обычно не видим в программах не-короткое замыкание.
Логические операторы Java (короткое замыкание)
&& и || — это логические операторы Java, эти операторы также называются условными операторами.
Они выполняют boolean над их двумя boolean операндами и получить результат boolean .
Логическое И (&&)
Логическое И выполняет логическую операцию И над своими операндами. Он оценивается как true тогда и только тогда, когда оба операнда логического И истинны. Если один или оба операнда равны false , он оценивается как false. Например:
// Возвращает значение true, если оба сравнения верны если (x < 10 && y > 3) ...
Обратите внимание, что все логические и логические операторы, кроме унарного ! имеют более низкий приоритет, чем операторы сравнения. Таким образом, совершенно законно написать строку кода, подобную приведенной выше. Однако некоторые программисты предпочитают использовать круглые скобки, чтобы сделать порядок вычислений явным:
если ((x < 10) && (y > 3)) ...
Логический оператор И или условный оператор И называется оператором короткого замыкания, потому что он условно оценивает свой второй операнд.
Если первый операнд оценивается как false, значение выражения равно false, независимо от значения второго операнда. Поэтому для повышения эффективности интерпретатор Java использует более короткий путь и пропускает второй операнд. Поскольку вычисление второго операнда не гарантируется, следует соблюдать осторожность при использовании этого оператора с выражениями, имеющими побочные эффекты. С другой стороны, условный характер этого оператора позволяет нам писать выражения Java, подобные следующим:
если (данные != null && iЛогическое ИЛИ (||)
Логический оператор ИЛИ выполняет логическую операцию ИЛИ над двумя логическими операндами. Он оценивается как
true, если один или оба его операнда равныtrue. Если оба операнда равныfalse, он оценивается какfalse. Как и оператор &&,||не всегда оценивает свой второй операнд. Если первый операнд равенtrue, значение выражения равноtrue, независимо от значения второго операнда.Таким образом, в этом случае оператор просто пропускает второй операнд.
Булевы операторы Java (без короткого замыкания)
Логическое И (&)
При использовании с логическими операндами оператор
иведет себя так же, как оператор&&, за исключением того, что он всегда оценивает оба операнда, независимо от значения первого операнда. Однако этот оператор почти всегда используется как побитовый оператор с целочисленными операндами, и многие Java-программисты даже не признали бы его использование с логическими операндами допустимым кодом Java.Логическое ИЛИ (|)
Этот оператор выполняет логическую операцию ИЛИ над двумя логическими операндами. Это как
||, за исключением того, что он всегда оценивает оба операнда, даже если первый из них истинен.| Операторпочти всегда используется как побитовый оператор для целочисленных операндов; его использование с булевыми операндами очень редко.) 9Оператор гораздо чаще используется в качестве побитового оператора для целочисленных операндов. С булевыми операндами этот оператор эквивалентен оператору
!=.Логическое НЕ (!)
Булево
!— это унарный оператор, который изменяет логическое значение своего операнда. При применении к значениюtrueоно оценивается какfalse, а если применяется к значениюfalse, оно оценивается какверно. За!— унарный оператор, он имеет высокий приоритет и часто должен использоваться со скобками. Это полезно в таких выражениях:if (!found) ... // найдено - логическая переменная, объявленная где-то while (!c.isEmpty()) ... // isEmpty() возвращает логическое значение если (!(х > у && у > г))Последнее слово
В этом уроке мы обсудили булевы и логические операторы Java. Надеюсь, вам понравилось читать это руководство по логическим операторам.
Пожалуйста, напишите нам, если у вас есть какие-либо предложения/комментарии или вы столкнетесь с какой-либо ошибкой на этой странице. Спасибо за чтение!
Каталожные номера
- Core Java, том I — основы
- Java: полный справочник, седьмое издание
- Операторы: руководство Sun
- Хитрости с битами
3.4 Булевы операторы
3.4 Булевы операторы 1. !p (не p) имеет значение true тогда и только тогда, когда p имеет значение false.
2. p && q (p и q) имеет значение true тогда и только тогда, когда оба p и q имеют значение true.
3. п || q (p или q) имеет значение true тогда и только тогда, когда хотя бы одно из p или q имеет значение true. Результаты применения булевых операторов можно свести к истинам. таблицы , как показано ниже.
Обратите внимание, что таблица истинности для p || q имеет значение true не только в том случае, если ровно одно из них истинно, но также и в том случае, если оба p и q истинны. Это может поначалу кажется странным, но мы часто используем слово «или» именно в этом смысле. За Например, если вас спросят: «Вы пьете сливки или сахар с кофе?» Это разумно ответить: «Да, я беру оба». Прием «сливок или сахара» включает возможность взять оба.
Если выражение содержит более одного логического оператора, то, как с арифметическими выражениями правила приоритета определяют порядок, в котором операции выполняются. Если мы не используем круглые скобки, то приоритет порядок трех логических операций
Эти операторы можно смешивать в выражениях с другими операторами. Порядок старшинства для операторов, которые мы видели до сих пор, таков:
Операции с одинаковым приоритетом выполняются слева направо с исключением операций присваивания, которые (как мы уже видели) выполняется справа налево.
При вычислении выражений, включающих && или ||, в Java используется метод известный как ленивая оценка или оценка короткого замыкания или условная оценка . Чтобы показать, как это работает, рассмотрим выражение p && q. Оценка это слева направо, если p ложно, то все выражение должно быть ложным, независимо от того, какое значение имеет q. Так как значение выражения известно без оценки q Java даже не смотрит на q. Конечно, если p истинно, то Java должен проверить q, чтобы определить значение всего выражения.
Аналогичная ситуация возникает с выражениями вида p || кв. Здесь,
если p истинно, то все выражение должно быть истинным, чтобы Java снова могла быть
ленив и не утруждать себя просмотром q.
Логические выражения часто можно упростить с помощью пары известных правил. как законы де Моргана , в честь логика Августа де Моргана. К Чтобы проиллюстрировать один из этих законов, рассмотрим утверждение «Эта книга скучна». и этот курс бесполезен». Чтобы это утверждение было правдой, обе его части должно быть правдой. Чтобы утверждение было ложным, одна или обе его части должны быть ложными. Таким образом, отрицание этого утверждения можно записать в виде «Эта книга не скучна, и этот курс не бесполезен». Если мы позволим b представлять «Эта книга скучная», а u — «Эта книга конечно бесполезен», то из вышеприведенного аргумента утверждение «это не верно, что эта книга скучна, а этот курс бесполезен», можно было бы написать в качестве ! (б && у). С другой стороны, утверждение «эта книга не скучная». или этот курс не бесполезен» можно записать как !b || !u. Поскольку эти утверждения эквивалентны, то
Это один из законов де Моргана.
Другой образуется путем замены
позиции && и ||. В качестве примера второй формы можно привести высказывание «Я
не люблю зеленые яйца или ветчину» означает «я не люблю зеленые яйца и я не люблю
как ветчина.» Использование символа для обозначения двух логических выражений
эквивалентно, мы можем записать два закона следующим образом:
|
Результатом команды a%b является остаток от целочисленного деления значений переменных a и b
Команда a%=b является эквивалентом команды a=a%b
B является true, если значение одного и только одного операнда равно true. В противном случае возвращается значение false

Исходное значение первого операнда при этом не меняется. Младшие биты заполняются нулями, а старшие теряются
Таким образом, в этом случае оператор просто пропускает второй операнд.
) 9Оператор гораздо чаще используется в качестве побитового оператора для целочисленных операндов. С булевыми операндами этот оператор эквивалентен оператору
Пожалуйста, напишите нам, если у вас есть какие-либо предложения/комментарии или вы столкнетесь с какой-либо ошибкой на этой странице. Спасибо за чтение!