Since the priority of operator * is higher than that of + and -, and the arithmetic operation is left associative, i*f is done first.
In C language, when performing arithmetic operations on variables of different types, float type variables must be unconditionally converted to double type. In this way, f is converted into double (double precision type) and multiplied by i, which is also double (double precision type), to obtain the double (double precision type) value.
After that, calculate 1'a". Since 'a' is a character type, C language rules mean that character type data must be unconditionally converted into int (integer type) when participating in arithmetic operations. In this way, 1 'a' is an integer type. The final value of 1'a' is added to i*f.
1'a' is an integer type, and i*f is a double precision type. Since double (double precision type) is higher than integer type, integer type variable automatically becomes double type. When two double (double precision type) numbers are added, the sum is still double (double precision type).
< The reason for p>type char->int->unsigned->long->double<-float is to make the result as accurate as possible.