Drugie przypisanie w warunku ifa się nie wykona, bo wartość pierwszego jest niezerowa.
Operator || tak działa, że najpierw oblicza lewą stronę i jeżeli po konwersji na bool wartość wrażenia po lewej stronie jest równa true, to nawet nie próbuje obliczać prawej strony. Prawa strona jest wartościowana tylko wtedy, gdy lewa strona ma wartość false. Gdyby tam było if ((x=0) || (y=3)) to do y wstawione by zostało 3, a do x 0.
Ta własność operatora || nazywana jest short-circuit evaluation, podobnie zachowuje się &&.