Wynik rzucania mnożenia dwóch dodatnich liczb całkowitych na długi jest wartością ujemną

Mam taki kod:

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

Wynik to-1717194752 ale jeśli dodam jeden rzut ręczny na długolong res = ((long)a)*b; lublong res = (long) a*b; wynik jest poprawny2577772544 Kto może wyjaśnić, jak to działa.

questionAnswers(3)

yourAnswerToTheQuestion