如何在C中的位级操作浮点数

时间:2018-02-13 16:36:24

标签: c bit-manipulation

有没有办法将浮点数转换为位模式,以便我可以执行

之类的操作
int mantissa = 0u;
int exponent = 0u;    

mantissa = myFloat>>11;
exponent = myFloat>>23;

尝试执行此操作会生成编译时错误:

main.c:24:11: error: invalid operands to binary >> (have 'float' and 'int')
mantissa = (myFloat>>11); 

main.c:25:12: error: invalid operands to binary >> (have 'float' and 'int')
exponent = (myFloat>>23);

有办法做到这一点吗?转换为int将给出signed int版本的位模式,所以我不想这样做,我希望将原始float的位保存为unsigned int。我怎样才能做到最好呢

1 个答案:

答案 0 :(得分:2)

典型的解决方案是这样的:

typedef union {
  unsigned int i;
  float f;
} u;
u u1;
u1.f = 0.341; // your float here
unsigned int x = u1.i; // converted to uint

这在C99中是合法的,不会调用UB(这是好的),或违反严格的别名规则。