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