Dlaczego tak
Operator && ma wyższy priorytet niż ||, więc wyrażenie odczytuje się jako a > 3 || (b != 0 && a / b > 1). Lewy argument a > 3 jest prawdziwy, a operator || oblicza się skrótowo, więc prawa część w ogóle nie jest wykonywana i dzielenie przez zero nie następuje. Wynik to true. Wyjątek wystąpiłby, gdyby obliczano wszystkie części wyrażenia, a false — przy błędnym założeniu, że && wiąże słabiej i obejmuje całość.