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

В операторе отношения термин «отношение» означает взаимосвязь, которая может существовать между двумя значениями (больше, равно, …), а термин «логический» в логическом операторе — взаимосвязь между логическими значениями «истина» и «ложь».

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

Операторы отношения

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

Логические операторы

Оператор Значение
& И
| ИЛИ
^ Исключающее ИЛИ
&& Укороченное И
|| Укороченное ИЛИ
! НЕ

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

В целом, объекты можно сравнивать на равенство или неравенство, используя операторы отношения == и !=.

А операторы сравнения <, >, <= или >= могут применяться только к тем типам данных, которые поддерживают отношение порядка. Следовательно, операторы отношения можно применять ко всем числовым типам данных.

Но значения типа bool могут сравниваться только на равенство или неравенство, поскольку истинные (true) и ложные (false) значения не упорядочиваются.

Например, сравнение true > false в C# не имеет смысла.

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


using System;
namespaceConsoleApplication1
{   
classProgram    
 {       
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();     
   }  
 }
}   

Результат:

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

Импликация — это двоичная операция, результатом которой является ложное значение только в том случае, если левый ее операнд имеет истинное значение, а правый — ложное. (Операция импликации отражает следующий принцип: истина не может подразумевать ложь).
Операция импликации может быть построена на основе комбинации логических операторов  !  и  | :
!p | q .

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

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

Пример:


using System;
namespace ConsoleApplication1
{    
   class Program    
   {        
      static void Main(string[] args) 
      {
         short d = 12, f = 0;  
// В данном случае используется укороченный оператор и 
// операции сравнения выполнится в нормальном потоке,
// так как первое условие = false, и второе не проверяется          
         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 будет инкриминировать 
         bool b = true;
         short i = 0;            
         if (b | (++i < 10)) 
            Console.WriteLine("i равно {0}", i);    // i=1!
// При использовании укороченного оператора
// значение i останется прежним 
         i = 0;
         if (b || (++i < 10))                
            Console.WriteLine("i равно {0}", i);   // i = 0!  
        Console.ReadLine();
      }
   }
}

Пример демонстрирует разницу между операторами «&&» и «&», а также между  «|»  и  «||» .
Далее рассмотрим варианты оператора присваивания.


NEW: Наш Чат, в котором вы можете обсудить любые вопросы, идеи, поделиться опытом или связаться с администраторами.


Понравилась статья? Поделиться с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о

2 комментариев
Новые
Старые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

В примере где:

bool b = true;
short i = 0;
if (b | (++i < 10))
Console.WriteLine("i равно {0}", i); // i=0!

У комментария должно же быть 1, а стоит 0. С толку сбивает немного так как вроде префиксная форма инкремента да и подписано, что "i будет инкреминироваться" а итог 0, радует что решил проверить в программе)

2
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x