以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  单精度浮点  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=169462)

--  作者:shyilin
--  发布时间:2021/6/17 15:50:00
--  单精度浮点
 Dim st1 As String = "41E0F000"
Dim st2 As String = DecToBin(HexToDec(st1))
If st2.Length< 32 Then
    st2="0" & st2
End If
Dim st3 As String =st2.SubString(9)
Dim st4 As String = st3.SubString(BinToDec(st2.SubString(1,8))-127)
Dim st6 As String =BinToDec("1" & st3.SubString(0,BinToDec(st2.SubString(1,8))-127)) & "." & BinToDec(st4.SubString(0,st4.LastIndexOf("1")+1))
Dim st8 As Double
st8= (-1)^st2.SubString(0,0) * CDbl(st6)
我这样写没办法算
红字老师帮忙看看呢  怎么算呢
这个是算单精度浮点


老师还有其他方法  帮忙改一下呢

--  作者:有点蓝
--  发布时间:2021/6/17 15:52:00
--  
算什么没看懂,"41E0F000"按什么规则计算?最终需要得到什么结果?
--  作者:shyilin
--  发布时间:2021/6/17 16:24:00
--  
FloatData=(-1)^s*1.m*2^E-127
先转成2进制  11000001111000000000000  前面如果有0会省去0  要把0补上
31 位是符号位,1 表示该数为负,0 反之;0
E: 30~23 位,一共 8 位是指数位(-128~127);:100000111转10进制计算
M: 22~ 0 位,一共 23 位是尾数位;1000000000000:



 结果是28.15

--  作者:有点蓝
--  发布时间:2021/6/17 17:30:00
--  
Dim hexStr  = "41E0F000"
Dim bytes2(3) As Byte
For i As Integer = 0 To 3
    bytes2(i) = Convert.ToByte(hexStr.Substring((3 - i) * 2, 2),16)
Next
Dim d As Single =  BitConverter.ToSingle(bytes2, 0)
Output.Show(d )

--  作者:shyilin
--  发布时间:2021/6/17 17:33:00
--  
好的  谢谢老师
[此贴子已经被作者于2021/6/17 17:34:45编辑过]

--  作者:有点蓝
--  发布时间:2021/6/17 17:35:00
--  
我也不懂