Option Explicit
Dim InLong(0 To 3) As Long
Dim i As Long
Dim ResultF As Single
Dim Sign As Long
Dim ZhiShu As Long
Dim WeiShu, WeiShuTmp As Long
Dim WeiS_Result As Single
Dim Ws As Long
Private Sub Command1_Click()
For i = 0 To 3
InLong(i) = Text1(i).Text
Next i
'使用这个子程序调用吧
ModLongtoFloat
Text2(0).Text = Sign
Text2(1).Text = ZhiShu
Text2(2).Text = WeiShu
Text2(3).Text = Format(WeiS_Result, "0.000000000000000")
Text3.Text = Format(ResultF, "0.0000000000000000")
End Sub
Public Sub ModLongtoFloat()
Sign = InLong(0) \ 128 '去最高位的符号位
ZhiShu = (CLng(InLong(0)) Mod 128) * 2 + InLong(1) \ 128 '取后续的8位,作为指数
WeiShu = (CLng(InLong(1)) Mod 128) * 256 * 256 + CLng(InLong(2)) * 256 + InLong(3) '取后续的23位,作为尾数的原始数据
'计算基数
WeiShuTmp = WeiShu
WeiS_Result = 0
For i = 0 To 22
Ws = WeiShuTmp Mod 2
WeiShuTmp = WeiShuTmp \ 2
WeiS_Result = WeiS_Result + (Ws * 2 ^ (-23 + i))
Next i
'计算最终的结果
ResultF = CSng((-1) ^ Sign) * (1 + WeiS_Result) * (2 ^ (ZhiShu - 127))
'需帮助,参阅前面的图片文件的例子
End Sub
Private Sub Command2_Click()
End
End Sub
- 1
- 2
- 3
前往页