Уроки > Операции отношения и логические операции в языке Си
Мы не продаём знания — мы ими делимся!

Если для вас это ценно, то поддержите проект.

Ваша поддержка — топливо для новых уроков!

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

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

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

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

Листинг 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;
}

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

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

  1. Операции в скобках
  2. Логическая операция НЕ
  3. Логическая операция И
  4. Логическая операция ИЛИ

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

  1. Операции в скобках
  2. Вычисление функций (например, sqrt(), cos() и др.)
  3. Логическая операция НЕ
  4. Умножение, деление, остаток от деления (слева направо)
  5. Сложение, вычитание
  6. Логическая операция И
  7. Логическая операция ИЛИ
  8. Выполнение присваивания

Практика

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

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