Условные выражения – сложные логические конструкции, в языке программирования C#, которые используются для управления ходом выполнения программы.
Условные конструкции могут включать в себя:
- Операции сравнения – это отдельная группа операторов, для сравнения значений, на вход принимают два аргумента одинакового типа данных, а возвращают логическое значение true(истина) или false(ложь);
- Логические операции – операторы, которые используются для работы с логическим типом данных bool (название в .Net нотации System.Boolean).
Операции сравнения
Оператор проверки на равенство ==
Если операнды эквивалентны, то операция сравнения вернет значение true, если не равны - false.
byte x = 2;
byte y = 11;
bool b = x == 2; //true
bool c = x == y; //false
Оператор проверки на неравенство !=
Если операнды не равны, то операция сравнения вернет значение true, если равны - false.
byte y = 1;
bool b = y != 2;//true
bool c = y != 1;//false
Оператор меньше <
Вернет true, если первый операнд строго меньше второго, в противном случае false.
int x = 42;
bool b = 40 < x;//true
bool c = 50 < x;//false
Оператор меньше равно <=
Вернет true, если первый операнд меньше второго, или значения равны, в ином случае false.
int x = 18;
bool b = x <= 46;//true
bool c = x <= 18;//true
bool d = x <= 14;//false
Оператор больше >
Вернет true, если первый операнд строго больше второго, в противном случае false.
int x = 17;
bool b = x > 15;//true
bool c = x > 22;//false
Оператор больше равно >=
Вернет true, если первый операнд больше второго, или значения равны, в ином случае false.
int x = 6;
bool b = x >= 4;//true
bool c = x >= 6;//true
bool d = x >= 8;//false
Логические операции
Применяются для оперирования логическим типом данных bool, принимают в качестве аргументов и возвращают булевы значения. Обычно используются для объединения нескольких выражений со сравнением.
Оператор логического отрицания !
Отрицание (логическое не) – унарная операция, которая возвращает true при значении операнда false и false – когда значение на входе true.
var b = false;
bool c = !b; //true
bool d = !(125 == 256); //true
Оператор логического сложения
Дизъюнкция (логическое или) – бинарная операция, которая вернет значение true, если один из операндов имеет значение true, в противном случае – false.
В языке C#, логическое или имеет две формы записи:
- | – полная дизъюнкция, вычисляет оба операнда, даже если первый равен true;
- || – сокращенное логическое сложение, если значение первого операнда true, то второй операнд не вычисляется.
bool b = (2 > 5) | (1 > 2); // false потому что, (2 > 5) - false, (1 > 2) - false
bool c = (2 < 5) | (1 < 2); // true потому что, (2 < 5) - true, (1 > 2) - false
bool d = (2 < 5) || (1 < 2); // true, поскольку (2 < 5) - true, второй операнд не вычисляется
Оператор логического умножения
Конъюнкция (логическое и) – бинарная операция, которая возвращает значение true, если оба операнда равняются true, в ином случае – false.
По аналогии с предыдущей операцией, логическое и поддерживает две формы записи:
- & – полная конъюнкция, вычисляет оба операнда, даже если первый - false;
- && – сокращенное логическое умножение, если первый операнд равен false, то второй - не вычисляется.
bool a = (2 < 5) & (1 < 2); // true потому что, (2 < 5) - true, (1 < 2) - true
bool b = (2 < 5) & (1 > 2); // false потому что, (2 < 5) - true, (1 > 2) - false
bool c = (1 > 4) && (1 < 2); // false, поскольку (1 > 4) - false, второй операнд (1 < 2) не вычисляется
Для улучшения производительности выполнения программы, рекомендуется использовать сокращенные формы логических операций “и”(&&) и “или”(||).
Оператор логического сложения по модулю ^
Исключительная дизъюнкция (операция xor) – бинарная операция, которая вернет значение true, если операнды не равны, то есть один из них имеет значение true, а другой - false, в противном случае – false.
bool a = (3 < 6) ^ (4 < 8); // false потому что, (3 < 6) - true, (4 < 8) - true
bool b = (2 < 5) ^ (1 > 2); // true потому что, (2 < 5) - true, (1 > 2) - false
Логические операторы с присвоением
По аналогии с арифметическими и побитовыми операциями, C# позволяет использовать логические операторы с присвоением для булевых выражений.
Их операндами могут быть:
- переменные и константы булевого типа;
- конструкции сравнения;
- логические выражения.
Логическое или с присвоением |=
Бинарный оператор, который присваивает левому операнду значение его дизъюнкции с правым:
bool d = false;
d |= (1 != 2);
//альтернативная форма записи
d = d | (1 != 2);
Логическое и с присвоением &=
Бинарный оператор, который присваивает левому операнду значение его конъюнкции с правым:
bool d = true;
d &= (1 != 2);
//альтернативная форма записи
d = d & (1 != 2);
Логическое исключительное или с присваивание ^=
Бинарный оператор, который присваивает левому операнду результат операции xor левого операнда с правым:
bool d = false;
d ^= (1 != 2);
//альтернативная форма записи
d = d ^ (1 != 2);
Приоритет выполнения операций
Приоритет | Оператор | Ассоциативность |
---|---|---|
1 | ! | левая* |
2 | <, >, <=, >= | -//- |
3 | ==, != | -//- |
4 | & | -//- |
5 | ^ | -//- |
6 | | | -//- |
7 | && | -//- |
8 | || | -//- |
9 | &=, |=, ^= | правая** |
* Левая ассоциативность – операции выполняются слева направо.
** Правая ассоциативность – справа налево.
Как и в случае с арифметическими операциями, приоритет выполнения в сложных условных выражениях можно менять с помощью скобок – “(” и “)”.