Приведение результата умножения двух положительных целых чисел на long является отрицательным значением

У меня есть такой код:

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

Результат-1717194752 но если я добавлю одно ручное приведение к длинномуlong res = ((long)a)*b; или жеlong res = (long) a*b; результат правильный2577772544 Кто может объяснить, как это работает.

Ответы на вопрос(3)

Ваш ответ на вопрос