0 возвращает не &.
& - жадный оператор. И левый, и правый операнд будут вычислены.
&& - ленивый. Если значение левого операнда false, то второй операнд даже не будет вычисляться.
Получается, что в первом случае выражение вычисляется полностью:
true & false & false -> false
Выражение firstNumber++ > 0
имеет значение false, тк это пост-инкремент.
В результате значение firstNumber=1 тк инкремент был вызван.
Во втором случае инкремент не будет вызван, тк значение выражение будет очевидно в самом начале:
(true && false)&& ... -> false
Тк инкремент не вызван, secondNumber=0