В программах на C/C++ операции отношений используются для сравнения двух величин между собой. Этими величинами могут быть числа, переменные, константы, результаты вычислений выражений, и т.п.. Операции отношений возвращают один из двух возможных случаев:
- true , если результат операции отношения исполняется (ИСТИНА);
- false , если результат операции отношения не исполняется (ЛОЖЬ).
Операции отношений есть бинарными. Они требуют двух операндов.
2. Какие операции отношений поддерживаются языком C/C++?
В языке программирования C/C++ поддерживаются следующие операции отношений:
> – больше – меньше >= – больше или равно – меньше или равно != – не равно == – равно
3. В каких конструкциях языка C/C++ могут использоваться операции отношений?
Операции отношений могут использоваться:
- в циклах, где есть условие выполнения цикла;
- в операторах присваивания, содержащих логические выражения (если нужно определить результат сложного логического выражения);
- в операторах условного перехода if .
4. Примеры операций отношений
Фрагмент кода, демонстрирующий использование операций отношений в программе на C/C++:
C Programming Tutorial 28 – The bool Data Type
// операции отношений int a, b; bool res; a = 9; b = -100; res = a > b; // res = True res = false == true; // res = False // ————— // оператор условного перехода if res = false; if (a>b) res = true; // res = true res = a > b == 8; // res = false a = 50; b = 0; res = a != b; // res = True // Тип bool есть целым типом res = 8; // res = True res = 0; // res = False
5. Как представлен тип bool в программах на C++? Как связаны типы bool и int ?
Тип bool представлен как целое число. Если значение переменной типа bool есть ненулевым, то оно считается равным true . Если значение переменной типа bool равно 0, то оно считается равным false .
Аналогично, если значение переменной целого типа не равно 0 (нуль), тогда оно считается как true . Если значение переменной целого типа равно 0, то оно эквивалентно значению false .
Пример.
// операции отношений // типы bool и int int a; bool b; a = 8; b = a; // b = True // использование в операторе if b = false; if (a) b = true; // на выходе b = true
Связанные темы
- Арифметические операции
- Логические операции. Поразрядные логические операции. Операции сдвига
- Операторы инкремента ( ++ ) и декремента ( — ). Составные операторы присваивания ( += , -= …)
- Таблица приоритетности операций
Источник: www.bestprog.net
bool (C++)
Это ключевое слово является встроенным типом. Переменная этого типа может иметь значения true и false . Условные выражения имеют тип bool , а значит и значения типа bool . Например, i != 0 теперь имеет true значение или false в зависимости от значения i .
How True and False Boolean Values Work In C
Visual Studio 2017 версии 15.3 и более поздних версий (доступно в /std:c++17 и более поздних версиях): операнд постфиксного или префиксного оператора инкремента или декремента может не иметь типа bool . Другими словами, при наличии переменной b типа bool эти выражения больше не допускаются:
b++; ++b; b—; —b;
Значения true и false имеют следующую связь:
!false == true !true == false
В следующем операторе
if (condexpr1) statement1;
Если condexpr1 имеет значение true , statement1 всегда выполняется; если condexpr1 имеет false значение , statement1 то никогда не выполняется.
Если оператор postfix или префикс ++ применяется к переменной типа bool , переменной присваивается значение true .
Visual Studio 2017 версии 15.3 и более поздних версий: operator++ для bool была удалена из языка и больше не поддерживается.
Оператор postfix или prefix — нельзя применить к переменной этого типа.
Тип bool участвует в целых повышениях по умолчанию. R-значение типа bool можно преобразовать в r-значение типа int с false нулевым и true равным единицей. Как отдельный тип участвует bool в разрешении перегрузки.
Источник: learn.microsoft.com
4.9 – Логические (булевы) значения
В реальной жизни часто задаются вопросы, на которые можно ответить «да» или «нет». «Яблоко – это фрукт?». Да. «Тебе нравится спаржа?». Нет.
Теперь рассмотрим аналогичное утверждение, на которое можно ответить «верно/истина» (true) или «неверно/ложь» (false): «Яблоки – это фрукты». Совершенно очевидно, что это истина. Или как насчет «Я люблю спаржу». Абсолютно неверно (фу!).
Такие предложения, которые имеют только два возможных результата: да/истина или нет/ложь, настолько распространены, что многие языки программирования включают в себя специальный тип данных для работы с ними. Этот тип называется логическим (булевым, Boolean) типом (примечание: Boolean на английском правильно пишется с заглавной буквы, потому что этот тип назван в честь своего изобретателя Джорджа Буля).
Логические переменные
Логические переменные – это переменные, которые могут иметь только два возможных значения: true (истина) и false (ложь).
Чтобы объявить логическую переменную, мы используем ключевое слово bool .
bool b;
Чтобы инициализировать или присвоить логической переменной значение истина или ложь, мы используем ключевые слова true и false .
bool b1 < true >; bool b2 < false >; b1 = false; bool b3 <>; // по умолчанию инициализируется значением false
Так же, как унарный оператор минус ( — ) может использоваться для превращения положительного числа в отрицательное, логический оператор НЕ ( ! ) Может использоваться для переключения логического значения с true на false или с false на true :
bool b1 < !true >; // b1 будет инициализирована значением false bool b2 < !false >; // b2 будет инициализирована значением true
Логические значения на самом деле не хранятся в логических переменных в виде слов «true» или «false». Вместо этого они хранятся как целые числа: true становится целым числом 1, а false становится целым числом 0. Аналогично, когда вычисляются логические значения, они на самом деле не оцениваются как «true» или «false». Они оценивают целые числа 0 ( false ) или 1 ( true ). Поскольку логические значения фактически хранят целые числа, они считаются целочисленным типом.
Печать логических переменных
Когда с помощью std::cout мы печатаем логические значения, std::cout печатает 0 для false и 1 для true :
#include int main() < std::cout ; std::cout
Вывод этой программы:
1 0 0 1
Если вы хотите, чтобы std::cout выводил « true » или « false » вместо 0 или 1, вы можете использовать std::boolalpha . Например:
#include int main() < std::cout
Эта программа напечатает:
1 0 true false
Чтобы отключить этот способ вывода, вы можете использовать std::noboolalpha .
Преобразование целочисленных значений в логические
Вы не можете инициализировать логическое значение целым числом, используя унифицированную инициализацию:
#include int main() < bool b< 4 >; // ошибка: сужающее преобразование запрещено std::cout
(примечание: некоторые версии g++ не обеспечивают генерирование этой ошибки)
Однако в любом контексте, где целочисленное значение может быть преобразовано в логическое значение, целое число 0 преобразуется в false , а любое другое целое число преобразуется в true .
#include int main() < std::cout
Эта программа напечатает:
true false
Ввод логических значений
Ввод логических значений с помощью std::cin начинающих программистов иногда сбивает с толку.
Рассмотрим следующую программу:
#include int main() < bool b<>; // по умолчанию инициализируется значением false std::cout > b; std::cout
Enter a Boolean value: true You entered: 0
Оказывается, std::cin принимает для логических переменных только два входных значения: 0 и 1 (а не true или false). Любые другие входные данные вызовут молчаливый сбой std::cin . В этом случае, поскольку мы ввели true , std::cin молча завершился ошибкой. Неудачный ввод также обнулит переменную, поэтому b также получит значение false . Следовательно, когда std::cout печатает значение b , он печатает 0.
Чтобы заставить std::cin принимать в качестве входных данных «false» и «true», необходимо включить параметр std::boolalpha .
#include int main() < bool b<>; std::cout > std::boolalpha; std::cin >> b; std::cout
Однако, когда включен std::boolalpha , «0» и «1» больше не будут обрабатываться как логические значения.
Логические возвращаемые значения
Логические значения часто используются в качестве возвращаемых значений для функций, которые проверяют, является ли что-то истинным или нет. Такие функции обычно называются, начиная со слова is (т.е. «является», например, isEqual ) или has (т.е. «имеет», например, hasCommonDivisor ).
Рассмотрим следующий пример, очень похожий на приведенный выше:
#include // возвращает true, если x и y равны, иначе false bool isEqual(int x, int y) < // operator== returns возвращает true, если x равно y, и false в противном случае return (x == y); >int main() < std::cout ; std::cin >> x; std::cout ; std::cin >> y; std::cout
Ниже показан результат двух запусков этой программы:
Enter an integer: 5 Enter another integer: 5 5 and 5 are equal? true
Enter an integer: 6 Enter another integer: 4 6 and 4 are equal? false
Как это работает? Сначала мы читаем целочисленные значения для x и y . Затем вычисляется выражение isEqual(x, y) . При первом запуске это приводит к вызову функции isEqual(5, 5) . Внутри этой функции вычисляется 5 == 5 , возвращая значение true . Значение true возвращается вызывающей функции для печати с помощью std::cout . При втором запуске вызов isEqual(6, 4) возвращает значение false .
К логическим значениям нужно немного привыкнуть, но как только вы начнете думать о них, они сразу же покажут свою простоту! Логические значения также являются огромной частью языка – вы в конечном итоге будете использовать их чаще, чем все другие базовые типы вместе взятые!