Operations in ALU take place between operands of the same type. When mixed type operands appear in the same expression, it is up to the compiler to convert them to the proper, common type.
Default types obey the ordering
For example, the mixed-type expression
{} i*r*dp*cis evaluated left-to right (all have the same precedence). For the first the integer i is converted to real, and the result i*r is real; this result is then converted to double precision, and (i*r)*dp is a double precision result; finally, this result in its turn is converted to complex to be able to calculate ((i*r)*dp)*c; the returned result is complex.