Conversão de tipo - não assinado para int / char assinado

Eu tentei executar o programa abaixo:

#include <stdio.h>

int main() {
    signed char a = -5;
    unsigned char b = -5;
    int c = -5;
    unsigned int d = -5;

    if (a == b)
        printf("\r\n char is SAME!!!");
    else
        printf("\r\n char is DIFF!!!");

    if (c == d)
        printf("\r\n int is SAME!!!");
    else
        printf("\r\n int is DIFF!!!");

    return 0;
}

Para este programa, estou recebendo a saída:

char é DIFF !!! int é o mesmo !!!

Por que estamos obtendo saídas diferentes para ambos?
A saída deve ser como abaixo?

char é o mesmo !!! int é o mesmo !!!

A link de codepad.

questionAnswers(5)

yourAnswerToTheQuestion