buenas,
a mi tambien me da false. ¿sera que tienes dificultad para interpretarlo? primero se evaluan las operaciones AND segun el orden que aparecen. se detiene en la primera evaluacion que devuelva false o simplemente devuelve la ultima evaluacion. por tanto,
Código:
(a1 > 0) || (a2 > 0) && (pa != 0) && (es != 0);
// se podria transcribir a ;
(a1 > 0) || true && false && (es != 0);
// de modo que devuelve el false e ignora el resto de las operaciones AND ;
(a1 > 0) || false;
// a1 no es mayor que cero, entonces devuelve false ;
false || false;
// finalmente, el resultado de la expresion es false porque ninguno de los dos boolean es true ;