Что * ((int *) & f) делает в C? - PullRequest
       73

Что * ((int *) & f) делает в C?

3 голосов
/ 29 сентября 2019

Я нашел способ преобразовать число с плавающей запятой в двоичный в c с помощью этого ответа: Преобразовать число с плавающей запятой в двоичный в C , но я не уверен, что на самом деле делает код, используемый в ответе *((int*)&f)конвертировать число.Что именно он делает?

1 Ответ

7 голосов
/ 29 сентября 2019

Это вызывает неопределенное поведение, означающее, что ваша программа недопустима, если она достижима.

То, что кто-то намеревался сделать, это переосмыслить биты float как int, предполагая, что int является 32-разрядным и, вероятно, также float является IEEE-одиночным.

Есть два правильных способа сделать это (int заменено на uint32_t, чтобы удалить первое бесполезное предположение):

  1. (union { float f; uint32_t i; }){f}.i
  2. uint32_t i; memcpy(&i,&f,sizeof i);
...