i
и j
увеличиваются, потому что i
необходимо оценить.j
также необходимо оценивать, поскольку i
не равно нулю.
Но поскольку это объединенное выражение не равно нулю, ||
короткое замыкание, а k++
не оценивается и не выполняется.
С другой стороны, побитовые операторы не закорачивают.Они также не конвертируются в логические значения.Если вы хотите оценить все условия и сохранить один и тот же результат, вы можете написать
m= (!!++i) & (!!++j) | (!!++k);
, используя трюк двойного отрицания для преобразования целочисленного значения в логическое значение.
Или сэкономить другое утверждение и упростить до (Предоставлено пользователем 694733):
++i; ++j; ++k;
m = i && j || k;