
C语言:将一个32位二进制数转换为带符号的浮点型数 50
C语言:将一个32位二进制数转换为带符号的浮点型数举个例子,我从传感器得到一个带符号的浮点数,传到计算机里为十六进制(假设为:0xC1480000),我现在需要写一段代码...
C语言:将一个32位二进制数转换为带符号的浮点型数举个例子,我从传感器得到一个带符号的浮点数,传到计算机里为十六进制(假设为:0xC1480000),我现在需要写一段代码,将这个十六进制转换成浮点型(-12.5)
请问这端代码怎么写 展开
请问这端代码怎么写 展开
2个回答
展开全部
跟你说原理吧,自己转为代码;
浮点数的保存方式:从左边到右边低位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
浮点数的保存方式:从左边到右边低位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
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询