Windows        15.11.2023   

Операции, операторы и выражения в языке Си (C). Условные выражения Больше либо равно c

 Синтаксис оператора присвоения языка СИ имеет вид:
  LValue = RValue;
  LValue – это то куда будет записано значение. В роли такого объекта в СИ может выступать только переменная.
 RValue – это то значение чего мы запишем в LValue. А в этой роли могут выступать такие объекты как:
  переменная,
  константа,
  оператор вызова функции,
  математическое или логическое выражение.
 Примеры присвоений
  int a, b, c;
  double x, y;
  a = 5; b = 4; c = a + b;
  x = 5.0; y = exp(x);

Усовершенствованные операторы присвоений в СИ

 В СИ присутствуют так называемые усовершенствованные операторы присвоения, выглядят они так:
  LValue X= RValue; где X – это одна операция из набора: + - * / % ^ & | >. это является аналогией оператора присвоения:
  LValue = LValue X RValue;
 К примеру:
  a += b; ≡ a = a + b;
 В языке СИ все математические операции можно разделить на 2 группы:
  1. математические операции для вещественных и целочисленных вычислений;
  2. математические операции только для целочисленных вычислений.

К математическим операциям для вещественных и целочисленных вычислений языка СИ относят обычные арифметические операции:
  сложения (+),
  вычитания (-),
  умножения (*),  деления (/).

Соответствие типа результата от типов операндов

Особенности языка СИ

 Рассмотрим одну из особенностей на примере:
  int a,b;
  double c;
  a = 10;
  b = 4;
  c = a / b; // c будет равно 2, т.к выполняется операция не деления, а деления нацело или же:
  double x = 1 / 3; // x будет равен 0, по той же причине что и в предыдущем примере

Операции для целочисленных вычислений

 К операциям целочисленных вычислений относятся:
  операция взятия остатка от деления,
  побитовые операции,
  операции сдвигов,
  операции инкремента и декремента.
 Операция взятия остатка от деления(mod) является бинарной операцией и в языке СИ обозначается символом процента (%). Пример вычисления:
  int a = 10, b = 3, c;
  c = a % b; // с будет равно 1

Побитовые операции в СИ

 Побитовые операции языка СИ представлены тремя бинарными и одной унарной операцией. К бинарным побитовым операциям относятся:
  операция «И» (&),
  операция «ИЛИ» (|)
  операция «Исключающее ИЛИ» (^).

Вот таблица истинности для этих операций:

первый операнд второй операнд операция
и или исключающее или
0 0 0 0 0
1 0 0 1 1
0 1 0 1 1
1 1 1 1 0

Побитовые операции

Унарной побитовой операцией является операция отрицания, обозначаемая символом тильды (~). Пример:
  unsigned char a = 10, b; //a: 00001010 = 10
  b = ~a; //b: 11110101 = 245

Операции сдвига

Операции сдвига осуществляют побитовый сдвиг целого значения, указанного в первом операнде, вправо (символ >>) или влево (символ <<) на указанное во втором операнде целое число бит. Пример:
 unsigned char a = 10, b, c; //a: 00001010 = 10
 b = a << 2; //b: 00101000 = 40
 c = a >> 1; //c: 00000101 = 5

Операции инкремента и декремента

Операции инкремента (знак ++) и декремента (знак --) являются унарными и осуществляют увеличение и уменьшение целого значения на единицу соответственно.
 int a = 10, b, c;
 b = ++a //пред- инкремент b == 11
 c = a++; //пост- инкремент с == 11

 В современных языках программирования (в том числе и языке СИ стандарта С99) данные операции могут использоваться и для вещественных значений. Пример:
 double x = 12.5;
 x++;
 printf("%lf\n”,x); //вывод: 13.5

Операции отношения (сравнения)

В языках программирования операции отношения (сравнения) являются бинарными операциями, осуществляющими сравнение двух операндов и возвращающие результат сравнения в виде логического значения. В языке СИ принято логические значения ИСТИНА и ЛОЖЬ интерпретировать посредством целочисленных значений:
 0 – ЛОЖЬ, 1 – ИСТИНА.
Обозначение Название
> Больше
< Меньше
>= Больше или равно
<= Меньше или равно
== Равно
!= Не равно

Примеры
Несколько примеров использования операций сравнения:
 int a=5, b=4, c=10, x, y;
 x = a > b; //x == 1
 y = c == a; //y == 0

Логические операции в СИ

Логические операции – унарные или бинарные операции, осуществляющие действия над логическими значениями и возвращающие логическое значение. Набор логических операций у разных языков программирования может быть различен.

Логические операции


 Примеры логических операций:
  int a=1, b=0, c, d; //a – ИСТИНА, b – ЛОЖЬ
  c = a || b; //c == 1
  d = !b && a; //d == 1

Приоритеты операций

++, -- Операции пост- инкремента и декремента
() Вызов функции, группировка операций
Обращение к элементу массива
-> Обращение к полю структуры или объединения через указатель
. Обращение к полю структуры или объединения
++, -- Операции пред-инкремента и декремента
! Логическое «НЕ»
~ Бинарное отрицание(инверсия)
+, - Унарные плюс и минус
& Операция взятия адреса
* Разыменование указателя
sizeof Оператор определения размера
(type) Оператор преобразования типа
* Умножение
/ Деление
% Взятие остатка от деления
+ Сложение
- Вычитание
<<, >> Побитовые сдвиги влево и вправо
<, <=, >, >= Операции сравнения
==, != Операции сравнения
& Побитовое «И»
^ Побитовое «Исключающее ИЛИ»
| Побитовое «ИЛИ»
Логическое «И»
|| Логическое «ИЛИ»
?: Условная операция
= Оператор простого присвоения
*=, /=, %=, +=, -=, <<=, >>=, &=, ^=,|= Усовершенствованные операторы присвоения
, Запятая

Особенности трансляторов


 Не определяется порядок, в котором вычисляются аргументы функции при ее вызове. Поэтому следующий оператор может дать различные результаты при трансляции разными компиляторами:
  printf("%d %lf\n”, ++n, pow(2.0,n));
 Результат будет зависеть от того, получает ли n приращение до или после вызова функции pow. Чтобы решить проблему достаточно записать так:   n++;
  printf("%d %lf\n”, n,pow(2.0,n));

Схема автоматического приведения типа


 1.Если какой-либо из операторов имеет тип long double , то и другой приводится к long double .
 2.Иначе, если какой-либо из операторов имеет тип double , то и другой приводится к double .
 3.Иначе, если какой-либо из операторов имеет тип float , то и другой приводится к float .
 4.Иначе, для обоих операндов выполняется расширение целого типа; затем, если один из операндов имеет тип unsigned long int , то другой преобразуется в unsigned long int .
 5.Иначе, если один из операндов имеет тип long int , а другой – unsigned int , то результат зависит от того, представляет ли long int все значения unsigned int ; если это так, то операнд типа unsigned int
 6.приводится к типу long int ; если нет, то оба операнда преобразуются в unsigned long int .
 7.Иначе, если один из операндов имеет тип long int , то и другой приводится к long int .
 8.Иначе, оба операнда имеют тип int .

Оператор приведения типа

  int a = 15, b = 2; double r = 0.0;
  r = a / b; //r == 7.0

 Оператор приведения типа: (тип)выражение.
  r = (double)a / b; //Правильно
  r = (double) (a / b); //Неправильно

Условная операция


 В языке СИ присутствует так называемая условная операция, которая имеет следующий синтаксис:
  условие? выражение №1: выражение №2;
 Пример условной операции. Необходимо ввести с клавиатуры два вещественных значения и вывести на экран максимальное из этих значений:
  #include


  {
   double x,y;
   scanf("%lf %lf”,&x,&y);
   double max = (x > y) ? x: y;
   return 0;
  }

 Необходимо ввести с клавиатуры три вещественных значения и вывести на экран максимальное из этих значений:
  #include

Int main(int argc, char *argv)
  {
   double x, y, z;
   printf("Введите значения: ");
   scanf("%lf %lf %lf",&x,&y,&z);
   double max = (x > y) ? ((x > z) ? x: z): ((y > z) ? y:z);
   printf("Максимальное значение: %lf\n",max);
   return 0;
  }

 Вещественное число вводится с клавиатуры. Возвести число в четвертую степень, используя только две операции умножения.
  #include

Int main(int argc, char *argv)
  {
   double a;
   printf("Введите значение: ");
   scanf("%lf",&a);
   a *= (a *=a);
   printf("Результат: %lf\n",a);
   return 0;
  }

 Квадратное уравнение вида задается коэффициентами A, B и C. Определить какое количество корней имеет данное уравнение.
  #include

Int main(int argc, char *argv)
  {
   double a,b,c;
   printf("Введите коэффициенты A, B и С: ");
   scanf("%lf %lf %lf",&a,&b,&c);
   double d = b*b-4*a*c;
   int n = (d < 0.0)?0:(d > 0.0)?2:1;
   printf("Количество корней: %d\n",n);
   return 0;
  }

Последнее обновление: 19.06.2017

Отдельный набор операций представляет условные выражения. Такие операции возвращают логическое значение, то есть значение типа bool : true , если выражение истинно, и false , если выражение ложно. К подобным операциям относятся операции сравнения и логические операции.

Операции сравнения

В операциях сравнения сравниваются два операнда и возвращается значение типа bool - true , если выражение верно, и false , если выражение неверно.

    Сравнивает два операнда на равенство. Если они равны, то операция возвращает true , если не равны, то возвращается false :

    B; // false

    Сравнивает два операнда и возвращает true, если операнды не равны, и false, если они равны.

    Int a = 10; int b = 4; bool c = a != b; // true bool d = a!=10; // false

    Операция "меньше чем". Возвращает true, если первый операнд меньше второго, и false, если первый операнд больше второго:

    Int a = 10; int b = 4; bool c = a < b; // false

    Операция "больше чем". Сравнивает два операнда и возвращает true, если первый операнд больше второго, иначе возвращает false:

    Int a = 10; int b = 4; bool c = a > b; // true bool d = a > 25; // false

    Операция "меньше или равно". Сравнивает два операнда и возвращает true, если первый операнд меньше или равен второму. Иначе возвращает false.

    Int a = 10; int b = 4; bool c = a <= b; // false bool d = a <= 25; // true

    Операция "больше или равно". Сравнивает два операнда и возвращает true, если первый операнд больше или равен второму, иначе возвращается false:

    Int a = 10; int b = 4; bool c = a >= b; // true bool d = a >= 25; // false

Операции <, > <=, >= имеют больший приоритет, чем == и!=.

Логические операции

Также в C# определены логические операторы, которые также возвращают значение типа bool . В качестве операндов они принимают значения типа bool . Как правило, применяются к отношениям и объединяют несколько операций сравнения.

    Операция логического сложения или логическое ИЛИ. Возвращает true, если хотя бы один из операндов возвращает true.

    Bool x1 = (5 > 6) | (4 < 6); // 5 > 6 - false, 4 < 6 - true, поэтому возвращается true bool x2 = (5 > 6) | (4 > 6); // 5 > 6 - false, 4 >

    Операция логического умножения или логическое И. Возвращает true, если оба операнда одновременно равны true.

    Bool x1 = (5 > 6) & (4 < 6); // 5 > 6 - false, 4 < 6 - true, поэтому возвращается false bool x2 = (5 < 6) & (4 < 6); // 5 < 6 - true, 4 < 6 - true, поэтому возвращается true

    Операция логического сложения. Возвращает true, если хотя бы один из операндов возвращает true.

    Bool x1 = (5 > 6) || (4 < 6); // 5 > 6 - false, 4 < 6 - true, поэтому возвращается true bool x2 = (5 > 6) || (4 > 6); // 5 > 6 - false, 4 > 6 - false, поэтому возвращается false

    Операция логического умножения. Возвращает true, если оба операнда одновременно равны true.

    Bool x1 = (5 > 6) && (4 < 6); // 5 > 6 - false, 4 < 6 - true, поэтому возвращается false bool x2 = (5 < 6) && (4 < 6); // 5 < 6 - true, 4 < 6 - true, поэтому возвращается true

    Операция логического отрицания. Производится над одним операндом и возвращает true, если операнд равен false. Если операнд равен true, то операция возвращает false:

    Bool a = true; bool b = !a; // false

    Операция исключающего ИЛИ. Возвращает true, если либо первый, либо второй операнд (но не одновременно) равны true, иначе возвращает false

    Bool x5 = (5 > 6) ^ (4 < 6); // 5 > 6 - false, 4 < 6 - true, поэтому возвращается true bool x6 = (50 > 6) ^ (4 / 2 < 3); // 50 > 6 - true, 4/2 < 3 - true, поэтому возвращается false

Здесь у нас две пары операций | и || (а также & и &&) выполняют похожие действия, однако же они не равнозначны.

В выражении z=x|y; будут вычисляться оба значения - x и y.

В выражении же z=x||y; сначала будет вычисляться значение x, и если оно равно true , то вычисление значения y уже смысла не имеет, так как у нас в любом случае уже z будет равно true . Значение y будет вычисляться только в том случае, если x равно false

То же самое касается пары операций &/&& . В выражении z=x&y; будут вычисляться оба значения - x и y.

В выражении же z=x&&y; сначала будет вычисляться значение x, и если оно равно false , то вычисление значения y уже смысла не имеет, так как у нас в любом случае уже z будет равно false . Значение y будет вычисляться только в том случае, если x равно true

Поэтому операции || и && более удобны в вычислениях, так как позволяют сократить время на вычисление значения выражения, и тем самым повышают производительность. А операции | и & больше подходят для выполнения поразрядных операций над числами.

Любое выражение языка состоит из операндов (переменных, констант и др.), соединенных знаками операций. Знак операции - это символ или группа символов, которые сообщают компилятору о необходимости выполнения определенных арифметических, логических или других действий.

Операции выполняются в строгой последовательности. Величина, определяющая преимущественное право на выполнение той или иной операции, называется приоритетом. В табл. 2 перечислены различные операции языка СИ (C). Их приоритеты для каждой группы одинаковы (группы выделены цветом). Чем большим преимуществом пользуется соответствующая группа операций, тем выше она расположена в таблице. Порядок выполнения операций может регулироваться с помощью круглых скобок.

Таблица 2 - операции

Знак операции

Назначение операции

Вызов функции

Выделение элемента массива

Выделение элемента записи

Выделение элемента записи

Логическое отрицание

Поразрядное отрицание

Изменение знака

Увеличение на единицу

Уменьшение на единицу

Взятие адреса

Обращение по адресу

Преобразование типа (т.е. (float) a)

Определение размера в байтах

Умножение

Определение остатка от деления

Сложение

Вычитание

Сдвиг влево

Сдвиг вправо

Меньше, чем

Меньше или равно

Больше, чем

Больше или равно

Поразрядное логическое "И"

Поразрядное исключающее "ИЛИ"

Поразрядное логическое "ИЛИ"

Логическое "И"

Логическое "ИЛИ"

Условная (тернарная) операция

Присваивание

+=, - =, *=, /=, %=, <<=,
>>=, &=, |=, ^=

Бинарные операции (например, а *= b
(т.е. a = a * b) и т.д.)

Операция запятая

Оператор в языке Си (C)

Для исключения путаницы в понятиях "операция" и "оператор", отметим, что оператор - это наименьшая исполняемая единица программы. Различают операторы выражения, действие которых состоит в вычислении заданных выражений (например: a = sin(b)+c; j++;), операторы объявления, составные операторы, пустые операторы, операторы метки, цикла и т.д. Для обозначения конца оператора в языке СИ (C)используется точка с запятой. Что касается составного оператора (или блока), представляющего собой набор логически связанных операторов, помещенных между открывающей ({) и закрывающей (}) фигурными скобками ("операторными скобками"), то за ним точка с запятой не ставится. Отметим, что блок отличается от составного оператора наличием определений в теле блока.

Характеристика основных операций языка Си (C)

Охарактеризуем основные операции языка СИ (C).

Операция присваивания

Сначала рассмотрим одну из них - операцию присваивания (=). Выражение вида

присваивает переменной х значение переменной у. Операцию "=" разрешается использовать многократно в одном выражении, например:

x = y = z = 100;

Различают унарные и бинарные операции. У первых из них один операнд, а у вторых - два. Начнем их рассмотрение с операций, отнесенных к первой из следующих традиционных групп:

Арифметические операции.

Логические операции и операции отношения.

Операции с битами.

Арифметические операции задаются следующими символами (табл. 2): +, -, *, /, % . Последнюю из них нельзя применять к переменным вещественного типа. Например:

a = b + c;
x = y - z;
r = t * v;
s = k / l;
p = q % w;

Логические операции

Логические операции отношения задаются следующими символами (см. табл. 2): && ("И"), || ("ИЛИ"), ! ("НЕ"), >, >=, <, <= , = = (равно), != (не равно). Традиционно эти операции должны давать одно из двух значений: истину или ложь. В языке СИ (C)принято следующее правило: истина - это любое ненулевое значение; ложь - это нулевое значение. Выражения, использующие логические операции и операции отношения, возвращают 0 для ложного значения и 1 для истинного. Ниже приводится таблица истинности для логических операций.

Битовые операции можно применять к переменным, имеющим типы int, char, а также их вариантам (например, long int). Их нельзя применять к переменным типов float, double, void (или более сложных типов). Эти операции задаются следующими символами: ~ (поразрядное отрицание), << (сдвиг влево), >> (сдвиг вправо), & (поразрядное "И"), ^ (поразрядное исключающее "ИЛИ"), | (поразрядное "ИЛИ").

Примеры: если a=0000 1111 и b=1000 1000, то

~a = 1111 0000,
a << 1 = 0001 1110,
a >> 1 = 0000 0111,
a & b = 0000 1000,
a ^ b = 1000 0111,
a | b = 1000 1111.

В языке предусмотрены две нетрадиционные операции инкремента (++) и декремента (--). Они предназначены для увеличения и уменьшения на единицу значения операнда. Операции ++ и -- можно записывать как перед операндом, так и после него. В первом случае (++n или --n) значение операнда (n) изменяется перед его использованием в соответствующем выражении, а во втором (n++ или n--) - после его использования. Рассмотрим две следующие строки программы:

a = b + c++;
a1 = b1 + ++c1;

Предположим, что b = b1 = 2, c = c1 = 4. Тогда после выполнения операций: a = 6, b = 2, c = 5, a1 = 7, b1 = 2, c1 = 5.

Широкое распространение находят также выражения с еще одной нетрадиционной тернарной или условной операцией?: . В формуле

y = a, если x не равно нулю (т.е. истинно), и y = b, если х равно нулю (ложно). Следующее выражение

y = (a>b) ? a: b;

позволяет присвоить переменной у значение большей переменной (а или b), т.е. y = max(a, b).

Еще одним отличием языка является то, что выражение вида а = а + 5; можно записать в другой форме: a += 5;. Вместо знака + можно использовать и символы других бинарных операций (см. табл. 2).

Другие операции из табл. 2 будут описаны в последующих параграфах.

Циклы организуются, чтобы выполнить некоторый оператор или группу операторов определенное число раз. В языке СИ (C)три оператора цикла: for, while и do - while. Первый из них формально записывается, в следующем виде:

for (выражение_1; выражение_2; выражение_3) тело_цикла

Тело цикла составляет либо один оператор, либо несколько операторов, заключенных в фигурные скобки { ... } (после блока точка с запятой не ставится). В выражениях 1, 2, 3 фигурирует специальная переменная, называемая управляющей. По ее значению устанавливается необходимость повторения цикла или выхода из него.

Выражение_1 присваивает начальное значение управляющей переменной, выражение_З изменяет его на каждом шаге, а выражение_2 проверяет, не достигло ли оно граничного значения, устанавливающего необходимость выхода из цикла.

for (i = 1; i < 10; i++)

for (сh = "a"; ch != "p";) scanf ("%c", &ch);

/* Цикл будет выполняться до тех пор, пока с клавиатуры

не будет введен символ "p" */

Любое из трех выражений в цикле for может отсутствовать, однако точка с запятой должна оставаться. Таким образом, for (; ;) {...} - это бесконечный цикл, из которого можно выйти лишь другими способами.

В языке СИ (C)принято следующее правило. Любое выражение с операцией присваивания, заключенное в круглые скобки, имеет значение, равное присваиваемому. Например, выражение (а=7+2) имеет значение 9. После этого можно записать другое выражение, например: ((а=7+2)<10), которое в данном случае будет всегда давать истинное значение. Следующая конструкция:

((сh = getch()) == "i")

позволяет вводить значение переменной сh и давать истинный результат только тогда, когда введенным значением является буква "i". В скобках можно записывать и несколько формул, составляющих сложное выражение. Для этих целей используется операция запятая. Формулы будут вычисляться слева направо, и все выражение примет значение последней вычисленной формулы. Например, если имеются две переменные типа char, то выражение

z = (х = у, у = getch());

определяет следующие действия: значение переменной у присваивается переменной х; вводится символ с клавиатуры и присваивается переменной у; z получает значение переменной у. Скобки здесь необходимы, поскольку операция запятая имеет более низкий приоритет, чем операция присваивания, записанная после переменной z. Операция запятая находит широкое применение для построения выражений цикла for и позволяет параллельно изменять значения нескольких управляющих переменных.

Допускаются вложенные конструкции, т.е. в теле некоторого цикла могут встречаться другие операторы for.

Оператор while формально записывается в таком виде:

while (выражение) тело_цикла

Выражение в скобках может принимать ненулевое (истинное) или нулевое (ложное) значение. Если оно истинно, то выполняется тело цикла и выражение вычисляется снова. Если выражение ложно, то цикл while заканчивается.

Оператор do-while формально записывается следующим образом:

do {тело_цикла} while (выражение);

Основным отличием между циклами while и do - while является то, что тело в цикле do - while выполняется по крайней мере один раз. Тело цикла будет выполняться до тех пор, пока выражение в скобках не примет ложное значение. Если оно ложно при входе в цикл, то его тело выполняется ровно один раз.

Допускается вложенность одних циклов в другие, т.е. в теле любого цикла могут появляться операторы for, while и do - while.

В теле цикла могут использоваться новые операторы break и continue. Оператор break обеспечивает немедленный выход из цикла, оператор continue вызывает прекращение очередной и начало следующей итерации.

Операторы условных и безусловных переходов

Для организации условных и безусловных переходов в программе на языке СИ (C)используются операторы: if - else, switch и goto. Первый из них записывается следующим образом:

if (проверка_условия) оператор_1; else оператор_2;

Если условие в скобках принимает истинное значение, выполняется оператор_1, если ложное - оператор_2. Если вместо одного необходимо выполнить несколько операторов, то они заключаются в фигурные скобки. В операторе if слово else может отсутствовать.

В операторе if - else непосредственно после ключевых слов if и else должны следовать другие операторы. Если хотя бы один из них является оператором if, его называют вложенным. Согласно принятому в языке СИ (C)соглашению слово else всегда относится к ближайшему предшествующему ему if.

Оператор switch позволяет выбрать одну из нескольких альтернатив. Он записывается в следующем формальном виде:

switch (выражение)

case константа_1: операторы_1;

case константа_2: операторы_2;

........ ........

default: операторы_default;

Здесь вычисляется значение целого выражения в скобках (его иногда называют селектором) и оно сравнивается со всеми константами (константными выражениями). Все константы должны быть различными. При совпадении выполнится соответствующий вариант операторов (один или несколько операторов). Вариант с ключевым словом default реализуется, если ни один другой не подошел (слово default может и отсутствовать). Если default отсутствует, а все результаты сравнения отрицательны, то ни один вариант не выполняется.

Для прекращения последующих проверок после успешного выбора некоторого варианта используется оператор break, обеспечивающий немедленный выход из переключателя switch.

Допускаются вложенные конструкции switch.

Рассмотрим правила выполнения безусловного перехода, который можно представить в следующей форме:

goto метка;

Метка - это любой идентификатор, после которого поставлено двоеточие. Оператор goto указывает, что выполнение программы необходимо продолжить начиная с оператора, перед которым записана метка. Метку можно поставить перед любым оператором в той функции, где находится соответствующий ей оператор goto. Ее не надо объявлять.

Турбо отладчик полностью поддерживает синтаксис выражений языка СИ (C). Выражение состоит из смеси операций, строк, переменных

Операторы отношения и логические операторы

В обозначениях оператор отношения и логический оператор термин отношения означает взаимосвязь, которая может существовать между двумя значениями, а термин логический - взаимосвязь между логическими значениями "истина" и "ложь". И поскольку операторы отношения дают истинные или ложные результаты, то они нередко применяются вместе с логическими операторами. Именно по этой причине они и рассматриваются совместно.

Ниже перечислены операторы отношения:

К числу логических относятся операторы, приведенные ниже:

Результатом выполнения оператора отношения или логического оператора является логическое значение типа bool .

В целом, объекты можно сравнивать на равенство или неравенство, используя операторы отношения == и!=. А операторы сравнения, = могут применяться только к тем типам данных, которые поддерживают отношение порядка. Следовательно, операторы отношения можно применять ко всем числовым типам данных. Но значения типа bool могут сравниваться только на равенство или неравенство, поскольку истинные (true) и ложные (false) значения не упорядочиваются. Например, сравнение true > false в C# не имеет смысла.

Рассмотрим пример программы, демонстрирующий применение операторов отношения и логических операторов:

Using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string args) { short d = 10, f = 12; bool var1 = true, var2 = false; if (d f) Console.WriteLine("d > f"); // Сравниванием переменные var1 и var2 if (var1 & var2) Console.WriteLine("Данный текст не выведется"); if (!(var1 & var2)) Console.WriteLine("!(var1 & var2) = true"); if (var1 | var2) Console.WriteLine("var1 | var2 = true"); if (var1 ^ var2) Console.WriteLine("var1 ^ var2 = true"); Console.ReadLine(); } } }

Логические операторы в C# выполняют наиболее распространенные логические операции. Тем не менее существует ряд операций, выполняемых по правилам формальной логики. Эти логические операции могут быть построены с помощью логических операторов, поддерживаемых в C#. Следовательно, в C# предусмотрен такой набор логических операторов, которого достаточно для построения практически любой логической операции, в том числе импликации. Импликация - это двоичная операция, результатом которой является ложное значение только в том случае, если левый ее операнд имеет истинное значение, а правый - ложное. (Операция импликации отражает следующий принцип: истина не может подразумевать ложь.)

Операция импликации может быть построена на основе комбинации логических операторов! и |:

Укороченные логические операторы

В C# предусмотрены также специальные, укороченные , варианты логических операторов И и ИЛИ, предназначенные для получения более эффективного кода. Поясним это на следующих примерах логических операций. Если первый операнд логической операции И имеет ложное значение (false), то ее результат будет иметь ложное значение независимо от значения второго операнда. Если же первый операнд логической операции ИЛИ имеет истинное значение (true), то ее результат будет иметь истинное значение независимо от значения второго операнда. Благодаря тому что значение второго операнда в этих операциях вычислять не нужно, экономится время и повышается эффективность кода .

Укороченная логическая операция И выполняется с помощью оператора && , а укороченная логическая операция ИЛИ - с помощью оператора || . Этим укороченным логическим операторам соответствуют обычные логические операторы & и |. Единственное отличие укороченного логического оператора от обычного заключается в том, что второй его операнд вычисляется только по мере необходимости.