Tipo de conversión - sin firmar a firmado int / char

Intenté ejecutar el siguiente programa:

#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, estoy obteniendo la salida:

char es DIFF !!! int es el mismo !!!

¿Por qué estamos obteniendo diferentes salidas para ambos?
¿La salida debería ser la siguiente?

char es el mismo !!! int es el mismo !!!

A enlace del teclado.

Respuestas a la pregunta(5)

Su respuesta a la pregunta