首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在c中将int64转换为float32

在c中将int64转换为float32
EN

Stack Overflow用户
提问于 2013-02-20 04:21:53
回答 2查看 4.6K关注 0票数 0

我从嵌入式设备读取代表64位整数的四个16位寄存器。read函数在uint16_t中读取它们,我想把它转换成32位浮点数。如果我像这样进行强制转换,我会得到警告,left shift count,>= width of type默认情况下是启用的。

代码语言:javascript
复制
uint16_t u1,u2,u3,u4;
u1=readregister();
u2=readregister();
u3=readregister();
u4=readregister();

float num11 = (float) (u1 << 48);       
float num22 = (float) (u2 << 32); 
float num33 = (float) (u3 << 16);   
float num44 = (float) u4;   
float numm= num11+num22+num33+num44;
printf("%f\n", numm);

那么准确性呢?

EN

回答 2

Stack Overflow用户

发布于 2013-02-20 04:23:08

这样做:

代码语言:javascript
复制
float num11 = (uint64_t) u1 << 48;
/* ... */

如果编译器因为uint64_t转换为float而发出警告(这是C不需要的),您可以添加额外的float强制转换:

代码语言:javascript
复制
float num11 = (float) ((uint64_t) u1 << 48);

这将消除警告。

出于效率和精度的原因,最好先将4个uint16_t转换为单个uint64_t,然后执行一次从uint64_tfloat的转换。

票数 2
EN

Stack Overflow用户

发布于 2013-02-20 04:29:22

一种方法是:

代码语言:javascript
复制
#include <math.h>

float numm = (float) u4 + ldexpf(u3, 16) + ldexpf(u2, 32) + ldexpf(u1, 48);

这不需要嵌入式编译器提供除uint16_t之外的任何其他整数大小,它只需要ldexpf()

这将计算在移位整数u1、…的数学和的一个ULP内的floatu4.

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

https://stackoverflow.com/questions/14966658

复制
相关文章

相似问题

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