Почему умножение дает неверный результат?

Рассмотрим пример, при котором перемножение 2-х чисел даст неверный результат:

var a,b:Word;
    l:LongInt;
 
a:=1234;
b:=567;
l:=a*b;

В итоге l=44318, а не 699678, как должно быть на самом деле.

Дело в том, что тип выражения определяется только типом входящих в него переменных, а не типом переменной, куда записывается результат. Если есть опасность переполнения, надо конвертировать тип явно:

l:=LongInt(a)*b;