A conversão de não assinado para assinado é indefinida?

void fun(){
    signed int a=-5;
    unsigned int b=-5;
    printf("the value of b is %u\n",b);
    if(a==b)
         printf("same\n");
    else
         printf("diff");
}

Está imprimindo:

4294967291

mesm

Na segunda linha, o valor assinado é convertido em valor não assinado. Então b tem o valor UINTMAX + 1 - 5 = 4294967291.

inha pergunta é o que está acontecendo na operação de comparaçã

1) A é novamente convertido em não assinado e comparado com b?

2) B (ou seja, não assinado) será convertido para o valor assinado e comparado automaticament

3) A conversão de não assinado em assinado é indefinida devido ao estouro de in

Li outras postagens sobre o tópico. Eu só quero esclarecimentos sobre as perguntas 2 e 3.

questionAnswers(6)

yourAnswerToTheQuestion