Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 |

 

  Вопрос: Срочно помогите я горью! Please! Добавлено: 23.01.09 12:36  

Автор вопроса:  Костя
число 67 из десятичной системы надо перевести в двиочную систему счисления. Программу надо создать.

Ответить

  Ответы Всего ответов: 18  

Номер ответа: 1
Автор ответа:
 Father



Вопросов: 0
Ответов: 159
 Профиль | | #1 Добавлено: 23.01.09 13:46
программа ! :)
  1. Private Function ToBin(var As Long) As String
  2.    Dim i As Integer
  3.    ToBin = IIf(var And &H80000000, "1", "0")
  4.    For i = 30 To 0 Step -1
  5.        ToBin = ToBin & IIf(var And 2 ^ i, "1", "0")
  6.    Next
  7. End Function
  8.  
  9. Private Sub Form_Load()
  10.     Debug.Print ToBin(67)
  11. End Sub

Ответить

Номер ответа: 2
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #2
Добавлено: 23.01.09 16:58
Ноги мне в рот, создать! Какие слова-то, гипербатоном Sharp многомудрый, удивляясь, произнес.

Ответить

Номер ответа: 3
Автор ответа:
 Father



Вопросов: 0
Ответов: 159
 Профиль | | #3 Добавлено: 23.01.09 17:18
Блин, забыл дописать lazy mode...
Или это копирайт? :)

Ответить

Номер ответа: 4
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #4
Добавлено: 23.01.09 18:39
я недавно писал прогу которая переводит любые числа (включая дробные) из одной системы в другую (с 2чной по 16чную) через десятичную систему. Там даже точность перевода учитывается - кол-во знаков после зпт. ОДНАКО Ж я флешку забыл в аудитории 1332=) и никак за ней не схожу)

Ответить

Номер ответа: 5
Автор ответа:
 fAndOrIn



Вопросов: 5
Ответов: 344
 Профиль | | #5 Добавлено: 23.01.09 23:40
Function ToBin2(L As Long) As String
Do
  ToBin2 = (L Mod 2) & ToBin2
  L = L \ 2
Loop While L <> 0
End Function

Ответить

Номер ответа: 6
Автор ответа:
 Father



Вопросов: 0
Ответов: 159
 Профиль | | #6 Добавлено: 24.01.09 08:54
fAndOrIn значения L могут быть и отрицательными ;)
а там все немножко подругому.

Ответить

Номер ответа: 7
Автор ответа:
 fAndOrIn



Вопросов: 5
Ответов: 344
 Профиль | | #7 Добавлено: 24.01.09 10:11
Абсолютно согласен, но поставленный вопрос ToBin2(67) решает.

Ответить

Номер ответа: 8
Автор ответа:
 fAndOrIn



Вопросов: 5
Ответов: 344
 Профиль | | #8 Добавлено: 24.01.09 12:56
Пример для теста. Работает раза в 3 быстрее ToBin
  1. Function ToBin3(L As Long) As String
  2. Dim N As Long, S As String * 32
  3. If L < 0 Then
  4.   L = L + 2147483648#
  5.   S = "1"
  6. Else
  7.   S = "0"
  8. End If
  9. For N = 32 To 2 Step -1
  10.   Mid(S, N, 1) = L Mod 2
  11.   L = L \ 2
  12. Next N
  13. ToBin3 = S
  14. End Function

Ответить

Номер ответа: 9
Автор ответа:
 Father



Вопросов: 0
Ответов: 159
 Профиль | | #9 Добавлено: 24.01.09 17:35
Ну вот, совсем же другое дело! А то отмазки какие-то:)
Параметр только ByVal объявить и Mid убрать.
Ускорим еще в два раза.
  1. Function ToBin4(ByVal L As Long) As String
  2. Dim N As Long, b(63) As Byte
  3. If L < 0 Then
  4.     L = L Xor &H80000000
  5.     b(0) = 49
  6. Else
  7.     b(0) = 48
  8. End If
  9. For N = 31 To 1 Step -1
  10.     If L Mod 2 Then
  11.         b(N * 2) = 49
  12.     Else
  13.         b(N * 2) = 48
  14.     End If
  15.     L = L \ 2
  16. Next N
  17. ToBin4 = b
  18. End Function

Ответить

Номер ответа: 10
Автор ответа:
 fAndOrIn



Вопросов: 5
Ответов: 344
 Профиль | | #10 Добавлено: 24.01.09 18:33
Папа, ты меня удивляешь(уже не первый раз)!
На пасквиле я примерно так и написал бы (разве что shr притянул для деления). Но то, что в Basic можно строке приравнять массив - для меня открытие! Спасибо за науку!
Правда, ускорилось у меня не в 2, а в 1.5 раза, но не суть. На еще 15%
  1. Function ToBin5(ByVal L As Long) As String
  2. Dim N As Long, b(63) As Byte
  3. If L < 0 Then
  4.     L = L Xor &H80000000
  5.     b(0) = 49
  6. Else
  7.     b(0) = 48
  8. End If
  9. For N = 31 To 1 Step -1
  10.     b(N * 2) = 48 + L Mod 2
  11.     L = L \ 2
  12. Next N
  13. ToBin5 = b
  14. End Function

Ответить

Номер ответа: 11
Автор ответа:
 Smith



ICQ: adamis@list.ru 

Вопросов: 153
Ответов: 3632
 Профиль | | #11 Добавлено: 24.01.09 21:00
флешку забыл в аудитории 1332


Главное, что не в комнате 303 на восьмом этаже :)

Ответить

Номер ответа: 12
Автор ответа:
 Smith



ICQ: adamis@list.ru 

Вопросов: 153
Ответов: 3632
 Профиль | | #12 Добавлено: 24.01.09 21:10
Там мужик с орлом в руке и черными очками :)

Ответить

Номер ответа: 13
Автор ответа:
 fAndOrIn



Вопросов: 5
Ответов: 344
 Профиль | | #13 Добавлено: 24.01.09 22:48
И еще чуть-чуть. В основном за счет N As Integer. Почему-то до сегодняшнего для считал, что 32-х разрядному процу до фени, что считать - байты, инты или лонги.
  1. Function ToBin6(ByVal L As Long) As String
  2. Dim N As Integer, b(63) As Byte
  3. b(0) = 48 - (L < 0)
  4. If L < 0 Then L = L Xor &H80000000
  5. For N = 62 To 2 Step -2
  6.     b(N) = 48 + L Mod 2
  7.     L = L \ 2
  8. Next N
  9. ToBin6 = b
  10. End Function
Кстати, непонятно, почему не получается объявить N As Byte?

Ответить

Номер ответа: 14
Автор ответа:
 Father



Вопросов: 0
Ответов: 159
 Профиль | | #14 Добавлено: 25.01.09 00:09
Что есть Step -2 применительно к беззнаковому Byte?
Попробуй for с инкрементом, либо while.

Ответить

Номер ответа: 15
Автор ответа:
 fAndOrIn



Вопросов: 5
Ответов: 344
 Профиль | | #15 Добавлено: 25.01.09 09:59
Father пишет:
Что есть Step -2 применительно к беззнаковому Byte?

И как обычно, прав. Хотя все равно не понятно, почему из Byte >= 2 в цикле нельзя вычитать 2.
for с инкрементом, либо while пробовать не стал. Почему то уверен, что ни скорости, ни лаконизма
созданной нами программе
это не добавит!

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам