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?