Почему printf («% f», 0); дать неопределенное поведение?

Заявление

printf("%f\n",0.0f);

печатает 0.

Тем не менее, заявление

printf("%f\n",0);

печатает случайные значения.

Я понимаю, что демонстрирую какое-то неопределенное поведение, но не могу понять, почему конкретно.

Значение с плавающей запятой, в котором все биты равны 0, все еще является действительнымfloat со значением 0.
float а такжеint одинакового размера на моей машине (если это даже актуально).

Почему использование целочисленного литерала вместо литерала с плавающей запятой вprintf вызвать такое поведение?

Постскриптум такое же поведение можно увидеть, если я использую

int i = 0;
printf("%f\n", i);

Ответы на вопрос(10)

Ваш ответ на вопрос