Информатика и технология программирования

       

Операции сравнения и логические операции


В Си отсутствует особый базовый тип данных для представления логических значений "ИСТИНА" и "ЛОЖЬ". Для этой цели используются значения целой переменной. Значение 0 всегда является "ложью". Значение 1 - "истиной". Такие значения дают операции сравнения и логические операции. Вообще, в широком смысле любое ненулевое значение является истинным. В такой интерпретации проверяются условия в операторах программы. Поэтому можно записать:


if (1) { A } else { B } // Всегда выполнять B


while (1) { ... } // "Вечный" цикл


if (k) { A } else { B } // Эквивалентно if(k !=0)

Все операции сравнения дают в качестве результата значения 1 или 0. Следовательно, их можно использовать совместно с арифметическими и другими операциями:


a = b &#62 c; // Запомнить результат сравнения


a = (b &#62 c)* 2 // Принимает значения 0 или 2



ЛОГИЧЕСКИЕ ОПЕРАЦИИ И (&#38&#38) , ИЛИ (||) и НЕ (!) едины для всех языков программирования и соответствуют логическим функциям И, ИЛИ и НЕ для логических (булевых) переменных. Операция И имеет результатом значение "истина" тогда и только тогда, когда оба ее операнда истинны, то есть по отношению к операндам -утверждениям звучит как "одновременно оба". Операция ИЛИ имеет результатом значение "истина", когда хотя бы один из операндов истинен, то есть характеризуется фразой "хотя бы один":


if (a &#60 b &#38&#38 b &#60 c) // если ОДНОВРЕМЕННО ОБА a &#60 b и b &#60 c, то...


if (a==0 || b &#62 0) // если ХОТЯ БЫ ОДИН a==0 или b &#62 0, то...

Логические операции И и ИЛИ имеют еще одно свойство. Если в операции И первый операнд имеет значение "ложь", а в операции ИЛИ -"истина", то вычисление выражения прекращается, потому что значение его уже становится известным ("ложь" -для И , "истина" -для ИЛИ ). Поэтому возможны выражения, где в первом операнде операции И проверяется корректность некоторой переменной, а во втором -она же используется с учетом этой корректности:


if (a &#62=0 &#38&#38 sin(sqrt(a)) &#62 0) ...

В данном примере второй операнд, включающий в себя функцию вычисления квадратного корня, не вычисляется, если первый операнд -"ложь".

Особо следует отметить операцию логической инверсии (отрицания) - "!" . Значение "истина" она превращает в "ложь" и наоборот. Если считать значением "истина" любое ненулевое значение целой переменной, то эту операцию для целых следует понимать как проверку на 0:


while(!k) {...} // эквивалентно while(k==0) {...}



Содержание раздела