Главная » Статьи » Программирование » С/С++ |
К предопределенным (еще точнее — к базовым или простым) типам значений относится тип bool, используемый для представления логических (булевых) значений. Константами-литералами булева типа являются true (истина) и false (ложь). Переменные типа bool не мот принимать значений, отличных от логических литералов. Им нельзя присваивать значений других типов, например, целочисленных. Логическое значение (типа bool) нельзя преобразовать ни в какое значение другого типа. Объявление с инициализацией логической переменной; bool real у = true; Из логических переменных и констант формируются логические (булевы) выражения. Для этого в языке C# имеются логические операции: & - конъюнкция (логическое И); | - дизъюнкция (логическое ИЛИ): ! - логическое отрицание; л - исключающее ИЛИ. Семантика этих операций известна из курса математической логики. Кроме того в C# определены две условные (conditional) логические бинарные операции: && - условная конъюнкция (условное И); || - условная дизъюнкция (условное ИЛИ). В выражении х&&у значение у не вычисляется, если х имеет значение false. В выражении х||у значение у не вычисляется, если х равно (rue. Кроме данных типа bool, в логических выражениях часто используются отношения. Отношение - это два операнда, соединенные (или разделенные) знаком операции отношений: > больше; >= больше или равно; < меньше; <= меньше или равно; == сравнение на равенство (равно); != сравнение на неравенство (не равно); Отметим, что операции сравнения на равенство (== и !=) имеют более низкий приоритет, чем все остальные операции отношений. Проверку принадлежности числового значения х интервалу (а. Ь), где а<=Ь, можно выполнить с помощью логического выражения: х<Ь&а<х Последовательность вычислений можно показать с помощью скобок: (х<Ь)&(а<х) Значением выражения будет true, если х принадлежит интервалу (а. Ь). Проверку истинности высказывания “значение х находится вне интервала (а,Ъ)” позволяют выполнить логические выражения: х>Ь~х<а; х>Ь\х<а; х>Ь 11 х<а. В третьем выражении использована условная дизъюнкция. Остановимся подробнее на ее особенностях. Условные версии (|| и &&) бинарных логических операций (& и |) позволяют избежать вычисления значения второго (правого) операнда логического выражения, если значение левого операнда однозначно определяет значение всего выражения. Проверку принадлежности х числовому интервалу (а,Ь) можно записать гак: х<Ь&&а<х Если х<Ь равно false, то нет необходимости вычислять значение отношения а<х. Обратите внимание, что знаки бинарных логических операций те же, что и знаки поразрядных операций конъюнкции (&) и дизъюнкции (|). То же самое относится и к знаку Л, который для целочисленных операндов обозначает операцию поразрядного исключающего ИЛИ. Как и в уже упомянутом случае применения знака + для обозначения операции конкатенации строк здесь имеет место перегрузка операций. Это еше один пример полиморфизма. Нелишним будет в связи с перегрузкой операций вспомнить, что символом в информатике называют знак с его смыслом. Встретив в выражениях знак &, компилятор анализирует контекст и, если обнаруживается, что справа и слева операнды типа bool, то знак & воспринимается как символ логической операции конъюнкции. Следующая программа “проверяет” три вещественных переменных х, у, z - могут ли быть их значения длинами сторон треугольника. // 04_02.es — отношения и логические выражения using System; class Program { static void Main() double x = 19, у = 31, z = 23.8; bool res; res = x<y + z& y<x+z&z<x + y; Console. WriteLine(i£res = * + res); Результат выполнения программы: res = True В программе логической переменной res присваивается значение логического выражения в виде конъюнкции трех отношений. Для заданных значений переменных х. у. z результат (те с помощью метода Console.'WriteLine() выводится как True... Обратите внимание на порядок вычисления использованного в программе логического выражения. С помощью круглых скобок последовательность выполнения операций можно указать явно таким образом: «х <= (у + z))&(y <= (х + z)))&(z <= (х + у)) Необходимости в таком применении скобок нет - в языке CU определены приоритеты (ранги) всех операций (см. табл. 3.1). В соответствии с этими приоритетами первыми в нашем логическом выражении вычисляются значения (типа double) операндов отношений (т.е. выполняется операция сложения +). Затем последовательно слева-на право вычисляются значения (типа bool) отношений, и к этим логическим значениям применяется слева-направо операция & (конъюнкция). Результат выполнения программы не изменится, если при вычислении логического выражения использовать условную конъюнкцию: res = x<y + z &&y<x+z&&z<x +у; Однако при получении значения false в любом из отношений отношения, размешенные правее него, не вычисляются. Применение условных логических операций удобно в тех случаях, когда истинность одного условия позволяет избежать аварийных ситуаций при вычислении второго условия. | |
Просмотров: 4067 | | |
Всего комментариев: 0 | |