C语言:将一个32位二进制数转换为带符号的浮点型数 50

C语言:将一个32位二进制数转换为带符号的浮点型数举个例子,我从传感器得到一个带符号的浮点数,传到计算机里为十六进制(假设为:0xC1480000),我现在需要写一段代码... C语言:将一个32位二进制数转换为带符号的浮点型数举个例子,我从传感器得到一个带符号的浮点数,传到计算机里为十六进制(假设为:0xC1480000),我现在需要写一段代码,将这个十六进制转换成浮点型(-12.5)
请问这端代码怎么写
展开
 我来答
处摇胼手胝足
2018-05-04 · TA获得超过295个赞
知道小有建树答主
回答量:488
采纳率:83%
帮助的人:175万
展开全部
跟你说原理吧,自己转为代码;
浮点数的保存方式:从左边到右边低位0-31到高位排列。
31位是正负标志,0是正,1是负;
30位是幂的正负标志,0是正,1为负;
20-29位2的幂(不带正负标志)
0-19位是实数的精度
如:浮点数 10101110 10010010 00111001 11111010 是这样表达的
31位1:-; 30位0:幂为正; 20-29位:2^9+2^7+2^6+2^5+2^3+2^0=845
0-19位:是小数精度R=2^-3+2^-7+2^-8+2^-9+2^-12+2^-13+2^-14+2^-15+2^-16+2^-17+2^-18+2^-20
整个浮点数是:-(1+R)*2^845
反转浮点数:例:-89.985759;
将 - 变为31位的1值;接着89.985759>1,幂的符号放30位的值0;
然后将89.985759 表达成1.XXX*2^n样式1.XXX>=1&&1.XXX<2;
89.985759=89.985759/64*2^6=1.406027484375*2^6;
6转为2进制0000000110放在29-20位;1.406027484375去除1变为0.406027484375
0.406027484375表达2进制为(x19)*2*-1+(x18)*2^-2+...+(x1)*2^-19+(x0)*2^-20形式,x19...x0就放在19-0位的值;
0.406027484375的2进制形式为:0110 01111111 00001101
整个32位的表达式位1 0 0000000110 01100111111100001101
这个表达式是浮点数:-89.985759;无符号整数269274893,有符号整数是-893437
KevinDears
2018-05-04 · TA获得超过4566个赞
知道大有可为答主
回答量:1万
采纳率:58%
帮助的人:1091万
展开全部
计算机存储的数据就是你上面的那个十六进制是,至于你要呈现为浮点数,只需要做这个简单的数据拷贝:
float fdata;
unsigned int SourceData = 0xC1480000;

memcpy((viod *)&fdata, (viod *)&SourceData, sizeof(fdata));
更多追问追答
追问
memcpy函数返回的就是这个浮点数吗
追答

不是函数返回浮点数,是memcpy是进行内存拷贝,把十六进制数用内存拷贝的方式赋值给浮点变量,这个时候fdata就已经是-12.5了。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式