Логические операторы "и" и "или" (& и |) можно использовать в двух Щтантах. Это связано с тем, что, как легко убедиться, для каждого оператора возможны случаи, когда значение первого операнда сразу определяет значение всего логического выражения. Если вторым операндом является значение некоторой функции, то появляется выбор - вызывать ее или нет, причем это решение может сказаться как на скорости, так и на функциональности программы.
Первый вариант операторов (&, |) всегда вычисляет оба операнда, второй же — (&&, 11) не будет продолжать вычисления, если значение Выражения уже очевидно. Например:
(х>0) I calculate(x) // в таком выражении произойдет вызов calulate (х>0) 11 calGulate(x) // а в этом - нет
Логический оператор отрицания "не" записывается как I и, конечно, имеет только один вариант использования. Этот оператор меняет булевское значение на противоположное.
intx=1;
х>0 // выражение истинно
!(х>0) // выражение ложно
Оператор с условием ? : состоит из трех частей — условия и двух выражений. Сначала выясняется условие (булевское выражение), а на основании результата значение всего оператора определяется первым выражением в случае получения истины и вторым — если условие ложно. Например, так можно вычислить модуль числа х:
х>0 ? X : -X