Programování uC Microchip v C

Ahoj, nevím jak toto specifikovat do googlu.
Chci mezi sebu vynásobit 2 int čísla a výsledek by se mi měl uložit do proměnné long. Jenomže kompilátor C30 mi výsledek násobení ukládá jako int a horních 9 bitů výsledku zahodí.

unsigned int U_BAT;
unsigned long UBAT;
U_BAT = 740;

UBAT = U_BAT * 31439;

V MPLABu v okně Watch vidím, že mám UBAT reprezentován jako 32b registr, ale při vynásobení se naplní jen spodních 16b a zbytek se mi nikam neuloží a ztratí se.

Používám dsPIC33FJ16GS502
Děkuji