为什么负数(长整型)在->二进制->十进制转换后变成正数啦?
进制转换我不太明白,各位帮我指点一下,按照如下代码运行就出现上述问题,如何在进制转换后得到正确的值啦?
Private Sub Command1_Click()
Dim f As Long, s As String, d As Long
f = -1234567
s = DecimalToBinary(f, 20)
d = BinaryToDecimal(s)
f = 0
End Sub
Private Function BinaryToDecimal(BinaryValue As String) As Long
Dim idx As Integer
Dim tmp As String
Dim result As Long
Dim digits As Integer
digits = Len(BinaryValue)
For idx = digits To 1 Step -1
tmp = Mid(BinaryValue, idx, 1)
If tmp = "1" Then result = result + 2 ^ (digits - idx)
Next
BinaryToDecimal = result
End Function
Private Function DecimalToBinary(DecimalValue As Long, MinimumDigits As Integer) As String
Dim result As String
Dim ExtraDigitsNeeded As Integer
Do
result = CStr(DecimalValue Mod 2) & result
DecimalValue = DecimalValue \ 2
Loop While DecimalValue > 0
' 如果转换出来的二进制长度低于给定的最小值则添0
ExtraDigitsNeeded = MinimumDigits - Len(result)
If ExtraDigitsNeeded > 0 Then
result = String(ExtraDigitsNeeded, "0") & result
End If
DecimalToBinary = result
End Function