Есть одна «заморочка» в использовании встроенных операторов - при комбинации нескольких операторов в одном выражении порядок выполнения операций определяется предустановленным уровнем приоритетности для каждого. Например, результат выражения 5 + 2*10 всегда равен 25 и никогда 70, поскольку оператор умножения имеет больший приоритет, чем оператор сложения. В итоге 2 всегда умножается на 10 прежде, чем складывается с 5.
Мы можем переопределить приоритет, взяв в скобки операцию, с выполнения которой хотели бы начать. (5 + 2) * 10, например, принимает значение 70.
Для операторов, о которых я говорил, предопределенные уровни приоритетности написаны ниже. Оператор, который выше, имеет больший приоритет, чем тот, что ниже. Операторы, расположенные в одну линию, имеют порядок определения слева направо.Наше выражение проверяет результат оператора остатка. Если ival четно, результат нулевой и логический операто НЕ становится истинным. Иначе, если результат ненулевой, логический оператор НЕ принимает значение false. Во всяком случае, так нам хотелось бы.
К сожалению, результат выражения совершенно иной. Наше выражение всегда будет ложным, исключая значение ival, равное нулю!