The C99 Standard differentiate between implicit and explicit type conversions (6.3 Conversions). I guess, but could not found, that implicit casts are performed, when the target
printf("INT_MIN as double (or float?): %e\n", a);
Above line has problem You can not use %e
to print ints. The behavior is undefined.
You should use
printf("INT_MIN as double (or float?): %e\n", (double)a);
or
double t = a;
printf("INT_MIN as double (or float?): %e\n", t);
Related post: This post explains how using incorrect print specifiers in printf can lead to UB.