Sé sobre int firmado y sin firmar, pero acabo de enterarme de char con y sin signo. ¿Qué son exactamente estos?

No hay un “tipo de carácter” dedicado en lenguaje C. char es un tipo entero, igual (en ese sentido) que int , short y otros tipos enteros. char simplemente resulta ser el tipo entero más pequeño. Entonces, al igual que cualquier otro tipo de entero, puede ser firmado o no firmado.

Es cierto que (como su nombre lo indica) char está destinado principalmente a ser utilizado para representar personajes. Pero los caracteres en C están representados por sus “códigos” enteros, por lo que no hay nada inusual en el hecho de que se use un char tipo entero para ese propósito.

La única diferencia general entre char y otros tipos enteros es que char simple generalmente no es sinónimo de signed char con signed char , mientras que con otros tipos enteros el modificador con signed es opcional / implícito.

Es esencialmente como int, excepto que puede ser más pequeño.

El carácter tanto en forma firmada como no firmada suele ser de 8 bits, pero eso no está garantizado.

La única garantía en C es que
sizeof (char) <= sizeof (short) <= sizeof (int) <= sizeof (long)

Para fines prácticos, use char como el tipo integral más pequeño, que puede contener un carácter imprimible.