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

  if (gender==1 && age >=65)++seniorFemales; 
Этот оператор if содержит два простых условия.Условие gender==1 может проверятся, например, чтобы определить, является ли данное лицо женщиной. Условие age >=65 проверяется, чтобы определить является ли человек пожилым гражданином. Простое условие слева от оператора && проверяется первым поскольку приоритет == выше, чем приоритет &&. Если необходимо простое условие справа от оператора && проверяется следующим , потому что приоритет >= выше, чем приоритет && (правая часть логического выражения AND проверяется только если левая часть является равной true).Затем оператор IF рассматривает комбинацию этих условий gender==1 && age >=65 это условие является равным true,если только оба простых условия является равными true. Наконец, если эта комбинация условий является равной true, то счетчик seniorFemales увеличивается на один. Если какое-либо или оба условия являются false программа пропускает инкрементирование и переходит к оператору следующему за if.Вышеуказанное комбинированное условие можно сделать более читабельным , добавив круглые скобки (gender==1) && (age>=65). Рассмотрим операцию||/ (логическое ИЛИ).Предположим, мы хотим обеспечить в некоторой точке программы, чтобы определенный путь вычислений выбирался только в случае, когда хотя бы одно из двух условий истинно.Вэтом случае мы можем применить логическую операцию ||, например:
  if ( semesterAverage >=90 || finalExam >=90 )
  	cout<<"Оцека студента -A"<<<endl;

Этот оператор также содержит два простых условия.Условие semesterAverage >=90 проверяется, чтобы определить, заслужил ли студент оценки A за курс в результате постоянной работы в течении семестра.Условие finalExam >=90 проверяется, чтобы определить, заслужил ли студент оценки A за курс вследствие выдающихся результатов на заключительном экзамене.Затем опрератор if рассматривает комбинацию этих условий

semesterAverage >=90 || finalExam >=90
и присуждает студенту оценку А, если любое из этих условий или оба они истинн.Отметим, что сообщение "Оценка студента-А" не печатается, только если оба просты условия ложны (если их значения равны 0). Операция && имеет более высокий приоритет, чем операция ||. Обе эти операции имеют ассоциотивность слева направо.Выражение, содержащее операции && и ||, оценивается только до тех пор, пока его истинность или ложност ьне станет очевидной.Таким образом анализ выражения
gender == 1 && age >=65
будет немедленно остановлен, если значение gender не равно 1 (т.е. условие в целом заведомо ложно), и продолжиться, если значение gender равно 1(т.е. в целом может оказаться истинным, если будет истинным условие age >=65). В выражениях использующих олерацию && может оказаться,что одно условие-зависимое-может требовать,чтобы другое условие было значимо при оценке зависимого условия.В этом случае зависимое условие должно быть помещно после другого условия, в пртивном случае может призойти ошибка. С++ содержит !( логическое отрицание), чтобы програмист мог изменить значение условия на противоположное.В отличие от операции && и ||, которые комбинируют два условия операция отрицая имеет в качестве операнда только одно условие. Операция логического отрицания помещается перед соответствующим условием, когда мы хотим выбрать некоторый ватиант расчета, в случае, если первоначально( без учета операции логического отрицания) это условие ложно.Пример:
if( ! (grade == sentinelValue ) )
	cout<<"Следующая оценка - "<<grade<<endl;

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

if (grade != sentinelValue)
	cout<<"Следующая оцека-"<< grade<<endl;
Подобная гибкость часто помогает программисту выразить условие в наиболее естественном и удобном виде.