На этом шаге мы рассмотрим операции отношения, логические и унарные операции.
Поговорим об операциях, с которыми еще не встречались в рассмотренных ранее примерах.
Если две переменные сравниваются с помощью операций отношения, то результат сравнения всегда бывает булева типа, т. е. либо ложен, либо истинен. Поэтому мы можем, например, писать:
int i = 34; int j = i * 25; bool a = i > j;
Операции отношения бывают весьма полезны. Допустим, в вашей программе цикл while (выражение) {...} работает не так, как вам бы того хотелось. Вы никак не можете разобраться, в чем дело, поскольку выражение в конструкции while настолько громоздко, что вы не можете его вычислить в момент отладки программы. Тогда это выражение можно присвоить некоторой (объявляемой вами) булевой переменной. Теперь вы сможете в режиме отладчика увидеть значение этого выражения и принять соответствующие меры.
Надо учитывать, что операции отношения по очередности (приоритету) их выполнения младше арифметических операций. Если вы напишете if (i < j - i), то при вычислении выражения в условной конструкции сначала будет вычислено j-i, а затем результат будет сравниваться с содержимым переменной i.
Выражение a && b будет истинным только тогда, когда истинны оба операнда (операнды имеют булевы значения).
Выражение a || b будет истинным только тогда, когда хоть один из операндов истинен.
Следует иметь в виду, что компилятор так строит алгоритмвычисления выражений, связанных этими операциями, что выражения вычисляются слева направо, и вычисление прекращается сразу, как только становится ясно, будет результат истинен или ложен. Поэтому при формировании выражений подобного рода следует их части, которые могут оказать первоочередное влияние на полный результат, располагать вначале, что экономит время.
Действительно, по определению условия if выражение в его скобках всегда должно быть истинным, поэтому получается, что при a=0 выражение !а будет равно 1 (истина). Тогда !!а=а=0, поскольку мы применили к обеим частям равенства операцию "не", а повтор этой операции возвращает число в исходное состояние.
К унарным относятся также операции "одиночный плюс" и "одиночный минус", явно устанавливающие знаки чисел или значений переменных. Например:
int x = -1; float z = 12.5; float у = -z;
На следующем шаге мы рассмотрим преобразование типов данных.