int dividido por unsigned int causando rollover

Intento dividir int por unsigned int y obtengo un resultado inesperado:

int b;
unsigned int c;
int res;
float res_f;

b = -25;
c = 5;

res = b / c;   // res = 858993454
res_f = b / c; // res_f = -5.000000

Lo mismo funciona bien para '+', '-' y '*', pero falla para '/'. ¿Qué es lo que extraño aquí?

PD

e probó en diferentes compiladores y el resultado fue el mism

Respuestas a la pregunta(1)

Su respuesta a la pregunta