是否有一种方法可以将浮点数转换为位模式,这样我就可以执行以下操作:
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将给出有符号int版本的位模式,所以我不想这样做,我希望原始浮点数的位保存到一个无符号int中。我怎么才能做得最好呢?
发布于 2018-02-13 16:39:47
典型的解决方案如下:
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 (这很好),或者违反严格的别名规则。
https://stackoverflow.com/questions/48771482
复制相似问题