首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在C中在位级别上操作浮点数

如何在C中在位级别上操作浮点数
EN

Stack Overflow用户
提问于 2018-02-13 16:36:24
回答 1查看 335关注 0票数 0

是否有一种方法可以将浮点数转换为位模式,这样我就可以执行以下操作:

代码语言:javascript
复制
int mantissa = 0u;
int exponent = 0u;    

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

尝试这样做会产生编译时错误:

代码语言:javascript
复制
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中。我怎么才能做得最好呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-13 16:39:47

典型的解决方案如下:

代码语言:javascript
复制
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 (这很好),或者违反严格的别名规则。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48771482

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档