以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 单精度浮点 (http://foxtable.com/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 -- 我也不懂 |