El resultado de la conversión de la multiplicación de dos enteros positivos a largo es un valor negativo

Tengo un código como este:

int a = 629339;
int b = 4096;
long res = a*b;

El resultado es-1717194752 Pero si agrego un molde manual a largolong res = ((long)a)*b; olong res = (long) a*b; el resultado es correcto2577772544 ¿Quién puede explicar cómo funciona?

Respuestas a la pregunta(3)

Su respuesta a la pregunta