Условные выражения

Условные выражения – сложные логические конструкции, в языке программирования 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 &=, |=, ^= правая**

* Левая ассоциативность – операции выполняются слева направо.
** Правая ассоциативность – справа налево.

Как и в случае с арифметическими операциями, приоритет выполнения в сложных условных выражениях можно менять с помощью скобок – “(” и “)”.

Смотрите также: