Это вызывает неопределенное поведение, означающее, что ваша программа недопустима, если она достижима.
То, что кто-то намеревался сделать, это переосмыслить биты float
как int
, предполагая, что int
является 32-разрядным и, вероятно, также float
является IEEE-одиночным.
Есть два правильных способа сделать это (int
заменено на uint32_t
, чтобы удалить первое бесполезное предположение):
(union { float f; uint32_t i; }){f}.i
uint32_t i; memcpy(&i,&f,sizeof i);