Главная > Уроки > Операции отношения и логические операции

Записывайся на этот курс на Stepike!

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

Как я уже писал ранее, условный оператор выполняет те или иные действия в зависимости от выполнения условия, заданного программистом. Давайте обсудим, какие условия можно задать в языке Си.

Сразу же напомню, что компьютер не очень-то сообразительный. В данном случае это проявляется в том, что он понимает только простые условия на да/нет. Но обо всём по порядку.

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

Листинг 1.

> - больше
>= - больше либо равно
< - меньше
<= - меньше либо равно
== - равно
!= - не равно 

Вот посмотрите на некоторые примеры:

Листинг 2.

#include <stdio.h>

int main(void) { 
  
  int a = 10, b = 5, c = 2;
  char ch = 'a';
  
  printf("%d\n", b > c );
  printf("%d\n", a == b*c );
  printf("%d\n", a != b*c );
  printf("%d\n", a < c );
  printf("%d\n", b >= c + 3 );
  printf("%d\n", -1 <= 2 );
  printf("%d\n", ch == 'a');
  printf("%d\n", ch != 'a');
    
  return 0;
}

Вы ещё помните, что компьютер понимает только нули и единицы? Так вот, как вы уже догадались:

Правило!

нуль это ложь, а единица – истина.

Вообще, любое число, кроме нуля, интерпретируется как истина. Думаю, дополнительных пояснений эти операции не требуют. Хотя на операцию сравнения обратите особое внимание. Т.к. один знак равно = используется для оператора присваивания, то для операции сравнения используется два знака равенства ==. Будьте внимательны и не забывайте об этом. Это частая ошибка, которую совершают начинающие программисты.

Кроме операций отношения есть ещё и логические операции. Они используются для того, чтобы из простых условий создавать сложные. Уже немного испугались? Да не, на самом деле ничего сложного. Сейчас разберёмся.

Логических операций всего три штуки:

Листинг 3.

! - логическое НЕ.
&& - логическое И.
|| - логическое ИЛИ.

Давайте объясню, как они работают.

Оператор логическое НЕ !(условие) отрицает выражение, к которому он был применён. Если условие было истиной, оно становится ложью, а если было ложью, то становится истиной. Вот пример:

Листинг 4.

#include <stdio.h>

int main(void) { 
  
  int a = 10, b = 5, c = 2;
    
  printf("%d\n", a == b*c );
  printf("%d\n", !(a == b*c) );
  printf("%d\n", a != b*c );
  printf("%d\n", !(a != b*c) );
    
  return 0;
}

(условие1) && (условие2) - оператор логическое И. Возвращает истину, если оба условия истинны. Иначе возвращает ложь.

Примеры:

Листинг 5.

#include <stdio.h>

int main(void) { 

  printf("%d\n", 1 && 1 );
  printf("%d\n", 1 && 0 );
  printf("%d\n", 0 && 1 );
  printf("%d\n", 0 && 0 );
    
  return 0;
}

(условие1) || (условие2) - оператор логическое ИЛИ. Возвращает истину, если хотя бы одно из условий истина или оба условия сразу истинны. Иначе возвращает ложь.

Примеры:

Листинг 6.

#include <stdio.h>

int main(void) { 

  printf("%d\n", 1 || 1 );
  printf("%d\n", 1 || 0 );
  printf("%d\n", 0 || 1 );
  printf("%d\n", 0 || 0 );
    
  return 0;
}

Приоритет логических операций

Для логических операций тоже есть определённая очерёдность выполнения.

  • Операции в скобках
  • Логическая операция НЕ
  • Логическая операция И
  • Логическая операция ИЛИ
Включим логические операции в общий список приоритетов операций, который мы составляли для арифметических операций и математических функций.
  • Операции в скобках
  • вычисляются функции (например, sqrt(), cos() и др.)
  • Логическая операция НЕ
  • умножение, деление, остаток от деления (слева направо)
  • сложение, вычитание
  • Логическая операция И
  • Логическая операция ИЛИ
  • выполняется присваивание

Сохрани в закладки или поддержи проект.

Практика

Решите предложенные задачи. Для удобства работы сразу переходите в полноэкранный режим

Дополнительные материалы

  1. материалов пока нет

Оставить комментарий

Чтобы код красиво отображался на странице заключайте его в теги [code] здесь писать код [/code]

Комментарии

Сергей
Поясните, почему решение #31643207 считает как wrong answer?
Локально работает корректно.
KaDeaT
Прошу прощения. У меня была ошибка. Спасибо за внимательность!
Alla Samoylova
Предлагаю текст: «...нуль это ложь, а единица – истина» выделить на странице, т.к. он принципиально важен, и задачи без этого знания правильно не решить. Сейчас этот текст написан в общем потоке и «теряется», не привлекает внимание.
KaDeaT
Согласен. Сделано. Спасибо.)
Николай Евсюков
Для логических операциЙ тоже есть определённая очерёдность выполнения
KaDeaT
Спасибо, поправил.
Бахтияр
Хотелось бы узнать, где место операциям отношений в общем списке приоритетов операций?
sologeek
последняя строчка
выполняется присваивание - это знак = ?
Михаил
А операторы сравнения какими идут в списке приоритетов операций?
Александр
Что не так с решениями:
1. #694992345
2. #694949532 ?
в 2 оператор switch уже из пройденного материала
в 1 подобрана формула выдающая верный результат?