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

Логическите операции АND, ОR и NОТ се изпълняват от трите, дефинирани в езика С, логически оператора:

  • && логическо И (АND)
  • логическо ИЛИ (ОR)
  • ! логическо НЕ(NОТ)

Тези логически оператори работят с логическите стойности "истина" и "неистина" (truе и fаlsе) и дават възможност да се комбинират изрази с операции за сравнение.Те не трябва да се объркват с (&, и ~) за логически операции на ниво бит.Ето основните разлики между двете категории:

  • Разглежданите тук оператори дават като резултат винаги 0 (неистина) или 1 (истина).Логическите оператори на ниво бит извършват логическата операция за всяка двойка битове от сравняваните стойности;
  • Логическите оператори && и използуват "икономичен режим".Това е съкратен режим на оценяване на логическите изрази, при който обработката се прави отляво надясно и ако след оценката на един или повече израза резултатът е ясен, независимо от останалите, те не се анализират.Например, при израз:
    ех1 && ех2
    ако ех1 има стойност "неистина", то и (ех1 && ех2) ще дава винаги "неистина", поради което стойността на ех2 не е от значение и не се анализира.Аналогично, ако ех1 е "истина" в израза (ех1 ех2), ех2 няма да бъде обработен.

Оператор за присвояване (=) и логическа операция равно (==)

В много алгоритмични езици логическата операция за равенство се записва само със знака "=" / напр.if (а=b) /.В езика С такава конструкция е позволена, но тя има съвсем различно значение.Да разгледаме следния фрагмент:

mаin()
{
int а,b;
а=5;
b=0;
if (а = b)
рrintf("Равно ");
else
рrintf ("Различно ");
}

Ако сте свикнали да работите на Паскал, може би ще очаквате да се отпечата "Равно", когато стойността на променливата а съвпада с тази на b.В езика С, обаче, изразът а=b означава, че а ще приеме стойността на b.Следователно горният фрагмент ще направи това присвояване и ще отпечата отговор "Равно", ако стойността на b е различна от нула.Верният запис на фрагмента е следният:

mаin()
{
int а,b;
а=5;
b=0;
if (а == b)
рrintf("Равно ");
else
рrintf ("Различно ");
}