As for why this happens, I guess, if you are sure that your C is a long type, it should be the compiler's problem. I have encountered this problem before when converting from char type to short type.
However, you can do this to be sure:
Long c;
c = a;
c = c * b; That's enough.
In addition, you can cast:
Long c;
C = (length) a* (length) b;