Я предполагаю, что это потому, что вы объявляете хранилище внутри оператора "if". Я даже не думал, что это скомпилируется.
Попробуйте это.
int alpha;
if ((alpha=value1-value2) && alpha>0.001)
Но я не думаю, что это делает то, что вам нужно. У вас есть альфа как int, и вы сравниваете ее со значением с плавающей точкой. Первая часть оператора && будет возвращать true, если альфа не равна нулю, а вторая часть возвращает true, если альфа больше 0. Поэтому вам, вероятно, следует сделать это
int alpha;
if ((alpha=value1-value2)>0)
или для более читабельного кода
int alpha=value1-value2
if (alpha>0)
Но чтобы ответить на ваш первоначальный вопрос: && выполняется слева направо и замыкается, когда ответ очевиден. То есть, если первая часть && неверна, вторая даже не оценена!