有没有办法将浮点数转换为位模式,以便我可以执行
之类的操作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。我怎样才能做到最好呢
答案 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(这是好的),或违反严格的别名规则。