пользователей: 30398
предметов: 12406
вопросов: 234839
Конспект-online
РЕГИСТРАЦИЯ ЭКСКУРСИЯ

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

Операциями отношения являются 

  =>   >       =<   <

все они имеют одинаковое старшинство. Непосредственно за ними по уровню старшинства следуют операции равенства и неравенства: 

  ==   !=

которые тоже имеют одинаковое старшинство. операции отношения младше арифметических операций, так что выражения типа I< LIM-1 понимаются как I< (LIM-1), как и предполагается. 
      Логические связки && и \!\! более интересны. Выражения, связанные операциями && и\!\!, вычисляются слева направо, причем их рассмотрение прекращается сразу же как только становится ясно, будет ли результат истиной или ложью. Учет этих свойств очень существенен для написания правильно работающих программ. Рассмотрим, например, оператор цикла в считывающей строку функции GETLINE, которую мы написали в главе 1. 

 FOR(I=0;I< LIM-1 && (C=GETCHAR()) != '\N' && C != EOF; ++I)

  S[I]=C;

      Ясно, что перед считыванием нового символа необходимо проверить, имеется ли еще место в массиве S, так что условие I< LIM-1 должно проверяться первым. И если это условие не выполняется, мы не должны считывать следующий символ. 
      Так же неудачным было бы сравнение 'C' с EOF до обращения к функции GETCHAR: прежде чем проверять символ, его нужно считать. 
      Старшинство операции && выше, чем у \!\!, и обе они младше операций отношения и равенства. Поэтому такие выражения, как 

 I< LIM-1 && (C = GETCHAR()) != '\N' && C != EOF

не нуждаются в дополнительных круглых скобках. Но так как операция != старше операции присваивания, то для достижения правильного результата в выражении 

  (C = GETCHAR()) != '\N'

скобки необходимы. 
      Унарная операция отрицания ! Преобразует ненулевой или истинный операнд в 0, а нулевой или ложный операнд в 1. Обычное использование операции ! Заключается в записи 

   IF( ! INWORD )

вместо 

   IF( INWORD == 0 )

Tрудно сказать, какая форма лучше. Конструкции типа ! INWORD читаются довольно удобно ("если не в слове"). Но в более сложных случаях они могут оказаться трудными для понимания. 
      Упражнение 2-1. 
      --------------- 
      Напишите оператор цикла, эквивалентный приведенному выше оператору FOR, не используя операции &&

логические операции

   Вы должны хорошо понять, что очень часто логические операции используются вместе с операциями отношения для записи условных выражений. На предыдущем уроке Вы уже имели возможность в этом убедиться, когда узнали, что результат выполнения операции отношения в языке С оценивается как истина (True) или ложь (False). То есть имеет место логический тип. 

    Однако, вместе с тем в языке С нет данных логического типа, то есть boolean тип в С отсутствует. Это очень важно помнить с самого начала при изучении языка С. 

2. Список логических операций в языке С. 

    Язык С имеет ровно три логические операции: это

  • && или (AND);
  • || или (OR);
  • ! или (NOT).
  • Как принято еще называть логические операции? 
    1. Операция "&&" или операция "AND" называется еще операцией "и" или логическим умножением.
    2. Операция "||" или операция "OR" называется еще операцией "или" или логическим сложением.
    3. Операция "!quot; или операция "NOT" называется еще операцией "не" или логическим отрицанием.

3. Таблицы истинности логических операций в языке С. 

    Разберемся, почему они так называются? Будем считать, что истина это "1", а ложь это "0". 

  1. Операция "&&" называется логическим умножением потому, что выполняется таблица истинности этой операции, очень напоминающая таблицу обыкновенного умножения из арифметики. 
        Логическое умножение это такая операция, которая истинна тогда и только тогда, когда истинны оба входящих в нее высказывания. 

       1 && 1 = 1
       0 && 1 = 0
       1 && 0 = 0
       0 && 0 = 0

 

  1. Операция "||" называется логическим сложением потому, что выполняется таблица истинности этой операции, очень напоминающая таблицу обыкновенного сложения из арифметики. 
        Логическое сложение это такая операция, которая истинна тогда и только тогда, когда истинно хотя бы одно из входящих в нее высказываний. 

       1 || 1 = 1
       0 || 1 = 1
       1 || 0 = 1
       0 || 0 = 0

 

  1. Операция "!" называется логическим отрицанием потому, что выполняется следующая таблица истинности. 
        Логическое отрицание это такая операция, которая истинна тогда и только тогда, когда ложно входящее в нее высказывание и наоборот. 

       !1 = 0
       !0 = 1

4. Логическая операция "исключающее или" в языке С. 

    Кроме трех расмотренных выше классических логических операций в языке С используется еще четвертая логическая операция: "исключающее или". 

    Если обычно принято 
операцию логическое умножение обозначать как "X AND Y", 
операцию логическое сложение как "X OR Y",
а логическое отрицание как "NOT X",
то операцию "исключающее или" обозначают как "X XOR Y". 

    Сделаем одно очень выжное замечание. Оно касается логической операции XOR. В языке С нет знака логической операции XOR. Однако, она может быть реализована с помощью операций AND, OR и NOT. Покажем теперь таблицу истинности этой новой логической операции в языке С. 

      1 XOR 1 = 0
      0 XOR 1 = 1
      1 XOR 0 = 1
      0 XOR 0 = 0

    Отсюда видно, что, если оба входящих в выражение высказывания истинны или оба ложны, то есть однакового значения истинности, то результат будет в этом случае ложным. То есть как бы отрицается утверждение: оба высказывания имеют одинаковый смысл истинности. 

    Напротив, если оба высказывания имеею разный смысл истинности, то в результате операции "исключающее или" это отрицается. Поэтому и выходит, что результат будет равен истине. 

5. Приоритет выполнения логических операций. 

    Логические операции и операции отношения имеют более низкий приоритет, чем арифметические операции. Это значит, что выражение 200>120+50 равносильно выражению 200>(120+50). 

    Принято следующее старшинство операций отношения и логических операций: 
      ! - самая старшая из логических операций 
Далее старшинство операций распределяется так: 
      >
      <
      >=
      <=
. Затем уже идут операции:
      ==
      !=
и самая младшая операция - это ||. 

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

    Отметим еще одну очень важную особенность операторов && и ||. Если при вычислении операции X && Y первое выражение X окажется нулевым (то есть ложным), то значение второго выражения Y никак не повлияет на результат. Это следует из таблицы истинности операции логическое умножение. Смотрите таблицу истинности этой операции. Поэтому действительно можно игнорировать второе выражение. Аналогично обстоит дело и с оператором ||. Так, если значение первого операнда ненулевое, то значение второго операнда так же не влияет на результат. Потому он так же не вычисляется и игнорируется. Это также следует из таблицы истинности операции логическое сложение. Поэтому нужно учитывать этот факт и не изменять во втором операторе какую-либо переменную, пользуясь операцией ++. 

    На этом у меня сегодня все. Урок окончен. А теперь разберите, пожалуйста, тест к уроку 34. 


27.12.2014; 10:54
хиты: 141
рейтинг:0
Точные науки
информатика
Языки программирования
для добавления комментариев необходимо авторизироваться.
  Copyright © 2013-2024. All Rights Reserved. помощь