Нашли ошибку или опечатку? Выделите текст и нажмите

Поменять цветовую

гамму сайта?

Поменять
Обновления сайта
и новые разделы

Рекомендовать в Google +1

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

58

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

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

Операторы отношения C#
Оператор Значение
== Равно
!= Не равно
> Больше
< Меньше
>= Больше или равно
<= Меньше или равно

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

Логические операторы 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");
            if (d <= f)
                Console.WriteLine("d <= f");
            if (d != f)
                Console.WriteLine("d != f");

            // Следующее условие не выполнится
            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# предусмотрен такой набор логических операторов, которого достаточно для построения практически любой логической операции, в том числе импликации. Импликация — это двоичная операция, результатом которой является ложное значение только в том случае, если левый ее операнд имеет истинное значение, а правый — ложное. (Операция импликации отражает следующий принцип: истина не может подразумевать ложь.)

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

!p | q

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

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

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

Укороченные логические операторы иногда оказываются более эффективными, чем их обычные аналоги. Так зачем же нужны обычные логические операторы И и ИЛИ? Дело в том, что в некоторых случаях требуется вычислять оба операнда логической операции И либо ИЛИ из-за возникающих побочных эффектов. Пример:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            short d = 12, f = 0, i = 0;
            bool b = true;

            // В данном случае используется укороченный оператор
            // и операции сравнения выполнится в нормальном потоке
            if (f != 0 && (d % f) == 0)
                Console.WriteLine("{0} делится нацело на {1}",d,f);

            // В этом случае так же используется укороченный оператор
            // но при этом возникнет исключительная ситуация
            // т.к. первый оператор сравнения содержит деление на 0
            if ((d % f) == 0 && f != 0)
                Console.WriteLine("{0} делится нацело на {1}", d, f);

            // При использовании целостного оператора в любом
            // случае возникнет исключительная ситуация
            if (f != 0 & (d % f) == 0)
                Console.WriteLine("{0} делится нацело на {1}", d, f);

            //*** Практический пример использования обычных операторов ***//
            // При использовании обычного оператора, в данной конструкции 
            // i будет инкреминироваться
            if (b | (++i < 10))
                Console.WriteLine("i равно {0}", i);   // i = 1

            i = 0;
            // При использовании укороченного оператора
            // значение i останется прежним
            if (b || (++i < 10))
                Console.WriteLine("i равно {0}", i);  // i = 0

            Console.ReadLine();
        }

    }
}


Стоит отметить, что при возникновении исключительной ситуации во время отладки кода, Visual Studio 2010 выводит сообщение следующего характера:

Исключительная ситуация
Пройди тесты