Precedenza di && su ||

Come so, l’operatore logico && ha una precedenza più alta di || . Durante l’esecuzione del codice:

 #include  int main() { int i = 1, j =1, k = 1; printf("%d\n",++i || ++j && ++k); printf("%d %d %d",i,j,k); return 0; } 

sta dando l’output:

 1 2 1 1 

che è ansible solo quando ++i || ++j && ++k ++i || ++j && ++k è valutato in questo modo:

 (++i) || (++j && ++k) 

Ma, secondo la regola della precedenza degli operatori, dovrebbe essere valutato come:

 (++i || ++j) && (++k) 

e quindi l’output dovrebbe essere:

 1 2 1 2 

Cosa c’è di sbagliato in questo?

NOTA: Secondo la mia comprensione, penso che un operatore di precedenza superiore abbia valutato come segue ( se è associato a sinistra ):
1. Valuta la sua espressione sinistra
2. Quindi valuta la sua espressione corretta (se necessario)
Ho sbagliato?