Операторы равенства: == и !=
Бинарные операторы равенства сравнивают операнды для строгого равенства или неравенства.
Операторы равенства, то есть равно ( == ) и не равно ( != ), имеют более низкий приоритет, чем операторы отношения, но их поведение аналогично. Тип результата для этих операторов . bool
== Оператор равного () возвращает true , если оба операнда имеют одно и то же значение; в противном случае возвращается false . Оператор not-equal-to ( != ) возвращает true , если операнды не имеют того же значения; в противном случае возвращается false .
Оператор ключевое слово для !=
C++ указывает not_eq в качестве альтернативной орфографии для != . (Нет альтернативной орфографии для == .) В C альтернативная орфография предоставляется в виде макроса в заголовке . В C++альтернативная орфография является ключевое слово; или эквивалентное
Пример
// expre_Equality_Operators.cpp // compile with: /EHsc #include using namespace std; int main()
Операторы равенства могут сравнивать указатели на члены одного типа. В таком сравнении выполняются преобразования указателя на члены. Указатели на члены также можно сравнить с константным выражением, результатом которого является значение 0.
Операции сравнения чисел
В условных инструкциях, в инструкциях цикла, как правило используются сравнения вида x > 0 или a != b (числа a и b не равны), то есть некоторое логическое выражение. В таких выражениях как правило используются операции сравнения (равно, неравно, меньше, больше и т.д.).
В языке C подобные операции возвращают значение типа int, либо 0, что считается ложью, либо 1, которое означает истину. В языке C++ для этого есть специальный логический тип bool .
Переменные логического типа bool принимают два значения: true (истина) и false (ложь). Также любое целочисленное выражение можно трактовать, как логическое выражение, при этом нулевое целое число означает ложь, а ненулевое — истину. Таким образом, если вместо условия написать false или 0 , то оно будет всегда ложно, если же указать true , 1 или любое ненулевое число, то условие будет истинно.
Как правило, в качестве проверяемого условия используется результат вычисления одного из следующих операторов сравнения:
| Меньше — возвращает true , если первый операнд меньше второго. | |
| > | Больше — возвращает true , если первый операнд больше второго. |
| Меньше или равно. | |
| >= | Больше или равно. |
| == | Равенство. Возвращает true , если два операнда равны. |
| != | Неравенство. Возвращает true , если два операнда неравны. |
Будьте аккуратны: оператор == (два знака равенства) — это проверка на равенство двух выражений, а оператор = (один знак равенства) — это присваивание одной переменной значения выражения и использование его в условии оператора ветвления в большинстве случаев является ошибкой.
Рассмотрим эту типичную ошибку на следующем примере:
int a, b; cin >> a >> b; if (a = b) < cout else
Здесь по ошибке вместо операции сравнения == использована операция присваивания = . Поэтому при любых значениях a и b переменной a будет присвоено значение переменной b, при проверке истинности выражения a = b . Но оператор присваивания еще и возвращает значение, поэтому если значение b было ненулевым (а это интерпретируется, как истина), то программа выведет строку «Числа равны», а если нулевым — то строку «Числа не равны». При этом значение переменной a может быть вообще любым.
«Не равно» в связке с логическим «или»
Дан одномерный массив типа char a[i] , где i — номер элемента. Необходимо, чтобы был осуществлен выход из цикла while :
while (!(a[i] == 48) || !(a[i] == 49)) i++; while (a[i] != 48) || a[i] != 49)) i++;
Пытался так пробовать — не работает. То бишь, когда код символа равен 48 или 49 должен произойти выход из цикла, а этого не происходит. Что не так?
Отслеживать
28.8k 12 12 золотых знаков 59 59 серебряных знаков 118 118 бронзовых знаков
задан 12 фев 2018 в 8:57
Виталий Китов Виталий Китов
51 3 3 серебряных знака 8 8 бронзовых знаков
Пока число не равно 48 ИЛИ не равно 49. так ведь какое не возьми — по-любому одному из двух оно не равно.
12 фев 2018 в 9:00
Потому что условие цикла всегда истинно.
12 фев 2018 в 9:00
у вас первый цикл отрабатывает пока не встречается 48 или 49 , а второй цикл работает пока встреченные символы равны 48 или 49 . Не понятно зачем вас сразу два этих цикла.
12 фев 2018 в 9:15
@AndrejLevkovitch, автор имеет в виду, что пробовал два разных варианта цикла. (Хотя они и идентичны).
12 фев 2018 в 11:40
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Условие «когда x равно 48 или 49» (или, более математично, «когда x равно 48 или когда x равно 49») выглядит так:
(x == 48) || (x == 49)
Можно и без скобок, но я оставил для наглядности.
Значит, продолжать цикл, если условие НЕ выполнено, т.е.
while(!((x == 48) || (x == 49)))
Если применить НЕ к А ИЛИ Б, то это — НЕ А И НЕ Б — т.е. второй вариант
while(!(x == 48) && !(x == 49))
или, что то же самое
while((x != 48) && (x != 49))
Т.е. работать, пока код — и не 48, и не 49.
Думаю, проблем подставить вместо x — a[i] проблемы не составит?
Отслеживать
ответ дан 12 фев 2018 в 9:01
219k 15 15 золотых знаков 119 119 серебряных знаков 230 230 бронзовых знаков
спасибки, все работает
12 фев 2018 в 15:45
while (!(a[i] == 48) || !(a[i] == 49))
означает, что если один из двух условий верно, то продолжить цикл. Как не крути, то элемент не может быть равен одновременно и 48 и 49, поэтому одно из двух условий всегда верно, и цикл продолжается.
while (a[i] != 48) || a[i] != 49))
если тут скобки поставить правильно и написать
while ((a[i] != 48) || (a[i] != 49))
то это тоже самое, что и первый вариант.
Правильный ответ уже изложил вам Harry.
If-else в С++, ветвление и логические операции: 3-я часть гайда по языку программирования
Разбираемся, как сделать программу на C++ полезнее, чем обычный калькулятор.



Евгений Кучерявый
Пишет о программировании, в свободное время создаёт игры. Мечтает открыть свою студию и выпускать ламповые RPG.
Это третья часть из серии «Глубокое погружение в C++». В прошлый раз мы научились работать с данными: переменными, константами и операциями с ними. Сегодня поговорим о более сложных аспектах языка.
Полезные программы умеют выполнять различные инструкции в зависимости от обстоятельств. Например, браузер отображает сайт, если всё успешно загрузилось, или сообщает об ошибке, если что-то пошло не так. Это называется ветвлением.
Ветвление в программе может быть таким:

Нет ни одной IT-сферы, где не нужно проверять какие-то условия, чтобы выполнить определённые действия: от робототехники до игр. Давайте разбираться, что такое условные конструкции, какими они бывают и как ими пользоваться.
Логические операции в C++
Есть тип данных bool (булев тип), в котором хранится значение либо истина, либо ложь. Благодаря ему и возможно ветвление.
Чтобы поместить в переменную булева типа какое-то значение, мы можем самостоятельно написать его (true или false) или ввести какое-либо логическое утверждение:
- число a больше числа b;
- имя пользователя — Игорь;
- сегодня четверг и так далее.
Дальше компьютер проверяет правдивость такого утверждения и возвращает результат.

Для написания таких утверждений необходимы логические операторы:
Вот несколько примеров:

После того как программа проверит утверждение, она выполнит (или не выполнит) всё, что написано внутри фигурных скобок. Вот пример программы с ветвлением:

Программа сначала проверит первое условие и, если оно ложно, будет проверять следующие за ним else if. Если ни одно из условий не было верным, выполняются инструкции внутри else, поэтому оно всегда должно стоять в конце.
Вы можете размещать условные конструкции внутри других условных конструкций:

Такие конструкции применяются, например, в работе с выпадающими списками.

Заключение
Ветвление — одна из ключевых особенностей любой программы. Постарайтесь как можно больше практиковаться с условными конструкциями, это поможет лучше закрепить знания.
В следующей статье мы на практике разберёмся, как работать с пользовательским вводом, и будем активно использовать операторы if и switch.
Читайте также:
- Объектно-ориентированное программирование. Часть 1. Что такое классы и объекты
- Нетоксичный чат для джунов: прокачать скиллы, найти ментора и первую работу
- C++ в 2k21: где используется, какие перспективы, что надо знать для старта