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



 

Операторы отношений и логические (булевы) операторы, которые часто идут "рука об руку", используются для получения результатов в виде значений ИСТИНА /ЛОЖЬ . Операторы отношений оценивают по "двубалльной системе" отношения между двумя значениями, а логические определяют различные способы сочетания истинных и ложных значений. Поскольку операторы отношений генерируют ИСТИНА/ЛОЖЬ‑результаты, то они часто выполняются с логическими операторами. Поэтому мы и рассматриваем их в одном разделе.

Операторы отношений и логические (булевы) операторы перечислены в табл. 3.6. Обратите внимание на то, что в языке C++ в качестве оператора отношения "не равно" используется символ "!=" , а для оператора "равно" – двойной символ равенства (== ). Согласно стандарту C++ результат выполнения операторов отношений и логических операторов имеет тип bool , т.е. при выполнении операций отношений и логических операций получаются значения true или false . При использовании более старых компиляторов результаты выполнения этих операций имели тип int (нуль или ненулевое целое, например 1). Это различие в интерпретации значений имеет в основном теоретическую основу, поскольку C++ автоматически преобразует значение true в 1 , а значение false – в 0 , и наоборот.

Операнды, участвующие в операциях "выяснения" отношений, могут иметь практически любой тип, главное, чтобы их можно было сравнивать. Что касается логических операторов, то их операнды должны иметь тип bool , и результат логической операции всегда будет иметь тип bool . Поскольку в C++ любое ненулевое число оценивается как истинное (true), а нуль эквивалентен ложному значению (false), то логические операторы можно использовать в любом выражении, которое дает нулевой или ненулевой результат.

 

 

Помните, что в C++ любое ненулевое число оценивается как true, а нуль– как false.

Логические операторы используются для поддержки базовых логических операций И , ИЛИ и НЕ в соответствии со следующей таблицей истинности. Здесь 1 используется как значение ИСТИНА, а 0 – как значение ЛОЖЬ.

 

 

Несмотря на то что C++ не содержит встроенный логический оператор "исключающее ИЛИ" (XOR), его нетрудно "создать" на основе встроенных. Посмотрите, как следующая функция использует операторы И , ИЛИ и НЕ для выполнения операции "исключающее ИЛИ" .

 

 

Эта функция используется в следующей программе. Она отображает результаты применения операторов И , ИЛИ и "исключающее ИЛИ" к вводимым вами же значениям. (Помните, что здесь единица будет обработана как значение true, а нуль – как false.)

 

 

Вот как выглядит возможный результат выполнения этой программы.

Введите Р (0 или 1): 1

Введите Q (0 или 1): 1

Р И Q: 1

Р ИЛИ Q: 1

Р XOR Q: 0

В этой программе обратите внимание вот на что. Хотя параметры функции xor() указаны с типом bool , пользователем вводятся целочисленные значения (0 или 1). В этом ничего нет странного, поскольку C++ автоматически преобразует число 1 в true , а 0 в false . И наоборот, при выводе на экран bool ‑значения, возвращаемого функцией xor() , оно автоматически преобразуется в число 0 или 1 (в зависимости от того, какое значение "вернулось": false или true). Интересно отметить, что, если типы параметров функции хоr() и тип возвращаемого ею значения заменить типом int, эта функция будет работать абсолютно так же. Причина проста: все дело в автоматических преобразованиях, выполняемых С++‑компилятором между целочисленными и булевыми значениями.

Как операторы отношений, так и логические операторы имеют более низкий приоритет по сравнению с арифметическими операторами. Это означает, что такое выражение, как 10 > 1+12 будет вычислено так, как если бы оно было записано в таком виде: 10 >(1 + 12)

Результат этого выражения, конечно же, равен значению ЛОЖЬ . Кроме того, взгляните еще раз на инструкции вывода результатов работы предыдущей программы на экран.

 

 

Без круглых скобок, в которые заключены выражения р && q и р || q , здесь обойтись нельзя, поскольку операторы && и || имеют более низкий приоритет, чем оператор вывода данных.

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

 

 

Приоритет операторов отношений и логических операторов показан в следующей таблице.

 

Выражения

 

Операторы, литералы и переменные – это все составляющие выражений . Вероятно, вы уже знакомы с выражениями по предыдущему опыту программирования или из школьного курса алгебры. В следующих разделах мы рассмотрим аспекты выражений, которые касаются их использования в языке C++.

 


Дата добавления: 2018-09-22; просмотров: 556; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!