Перевод из двоичной в десятичную систему.

  • Автор темы prg1990
  • Дата начала
P

prg1990

Гость
#1
Программа переводит положительные и отрицательные десятичные числа в двоичный код.Проблема заключается в том что программа выполняет перевод коротких чисел но не выполняет перевод 32 разрядных длинных чисел например 2456765654.Ошибка overflow.Нужно чтобы она переводила любой числовой тип данных .Исходник приведен в архиве.Если у кого-то есть идеи как оптимизировать код то поделитесь ими пожалуйста.Заранее благодарю.

Код:
Dim a
Dim c
Dim b As String
Dim s As String
Dim w As String
Dim g
Dim z As String
Dim p As String
Dim q
Private Sub Command1_Click() 
Text2.Text = ""
w = 0
z = ""
q = 0
v = 0
n = 0
b = ""
i = 0

a = Text1.Text
If Val(a) >= 0 Then 
Do While a > 0
q = a Mod 2
v = Str(q)
n = LTrim(v) 
b = b + n
a = a \ 2
i = i + 1
Loop
i = 1
If Len(B) < 32 Then Do While i <= 32 - Len(B): b = b + "0": Loop 
w = StrReverse(B) 
Text2.Text = w
End If
If Val(a) < 0 Then
a = a * (-1)
Do While a <> 0
If (Abs(a) Mod 2 = 1) Then
s = "1" + s
Else: s = "0" + s
End If
a = Abs(a) \ 2
Loop
If Len(s) < 32 Then
For i = Len(s) To 31
s = "0" + s
Next
End If
s1 = ""
For i = 32 To 1 Step -1
If Mid(s, i, 1) = "0" Then
s1 = "1" + s1
Else: s1 = "0" + s1
End If
Next
s = s1
If Mid(s, 32, 1) = "0" Then
s = Mid(s, 1, 31) + "1"
Else: s = Mid(s, 1, 31) + "0"
End If
Text2.Text = s
End If
c = 0
End Sub
 

Вложения

  • 1.7 КБ Просмотры: 9
W

werti

Гость
#2
Попробуй этот код. Вроде рабочий :D
Как то находил на каком-то сайте ^_^
Код:
Dim a As Integer
Dim i As Long
For i = 1 To Len(ch)
a = a + CLng(Mid$(ch, i, 1)) * 2 ^ (Len(ch) - i)
Next
Отрицательные числа не поддерживает думаю сможешь дописать
ch - число в двоичной системе
a - полученное число в десятичной системе (String)