Precedência do operador e operador ternário

Eu tenho um problema em C.

<code>#include<stdio.h>
int main()
{
    int a = 10, b = 0, c = 7;
    if (a ? b : c == 0)
        printf("1");
    else if (c = c || a && b)
        printf("2");
    return 0;
}
</code>

Este código imprime 2, mas acho que um? B: c retorna b = 0 e 0 == 0 retorna 1. Você pode explicar o código?

questionAnswers(2)

yourAnswerToTheQuestion