Вы делаете штамп типа между типами int
и struct
, содержащими внутреннее представление float
.
Это даст вам неправильные ответы.
Если вы хотите знать представление целого числа с плавающей запятой, правильный результат можно получить, выполнив предыдущее приведение к float
.
int x = 3;
myfloat var;
var.f = (float)x;
binary(var.field.exponent, 8);
binary(var.field.mantissa, 23);
Кроме того, примите во внимание, что нельзя предположить, что представление IEEE с плавающей запятой используется для float
.
Например, посмотрите эту ссылку:
Макрос __STDC_IEC_559__
С другой стороны, битовые поля не обязательно являются смежными во всех реализациях.
См. Недостатки битового поля .