Visual Basic, .NET, ASP, VBScript
 

   
   
     

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

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

 

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

Автор вопроса:  Костя

Ответить

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

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



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #16
Добавлено: 25.01.09 16:21
то есть с byte как то так надо?
  1. For N = 2 To 62 Step 2
  2.     b(64-N) = 48 + L Mod 2

что быстрее, делать 1 операцию с integer, или 2 с byte?

Ответить

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



Вопросов: 5
Ответов: 344
 Профиль | | #17 Добавлено: 25.01.09 18:00
Попробовал, но судите сами...
  1. Sub TestToBin()
  2. Dim I As Long, T As Single, J As Long
  3. I = 100000
  4. T = Timer
  5. For J = -I To I: ToBin6 J: Next J
  6. Debug.Print Timer - T '2,109375 sec
  7. T = Timer
  8. For J = -I To I: ToBin7 J: Next J
  9. Debug.Print Timer - T '2,265625 sec
  10. End Sub
  11.  
  12. Function ToBin7(ByVal L As Long) As String
  13. Dim N As Byte, b(63) As Byte
  14. b(0) = 48 - (L < 0)
  15. If L < 0 Then L = L Xor &H80000000
  16. For N = 2 To 62 Step 2
  17.     b(64 - N) = 48 + L Mod 2
  18.     L = L \ 2
  19. Next N
  20. ToBin7 = b
  21. End Function

Как и предполагал в 15 посте, налицо регресс по обоим показателям.

Ответить

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



Вопросов: 5
Ответов: 344
 Профиль | | #18 Добавлено: 09.02.09 20:10
"Деревянный" подход оказался почти в 2 раза быстрее ToBin6 и почти в 10 - ToBin
  1. Function ToBinYes(ByVal L As Long) As String
  2. Dim N As Integer, b(63) As Byte, m As Boolean
  3. m = L < 0
  4. b(0) = 48 - m
  5. If m Then L = L Xor &H80000000
  6. b(62) = 48 - CBool(L And &H1&)
  7. b(60) = 48 - CBool(L And &H2&)
  8. b(58) = 48 - CBool(L And &H4&)
  9. b(56) = 48 - CBool(L And &H8&)
  10. b(54) = 48 - CBool(L And &H10&)
  11. b(52) = 48 - CBool(L And &H20&)
  12. b(50) = 48 - CBool(L And &H40&)
  13. b(48) = 48 - CBool(L And &H80&)
  14. b(46) = 48 - CBool(L And &H100&)
  15. b(44) = 48 - CBool(L And &H200&)
  16. b(42) = 48 - CBool(L And &H400&)
  17. b(40) = 48 - CBool(L And &H800&)
  18. b(38) = 48 - CBool(L And &H1000&)
  19. b(36) = 48 - CBool(L And &H2000&)
  20. b(34) = 48 - CBool(L And &H4000&)
  21. b(32) = 48 - CBool(L And &H8000&)
  22. b(30) = 48 - CBool(L And &H10000)
  23. b(28) = 48 - CBool(L And &H20000)
  24. b(26) = 48 - CBool(L And &H40000)
  25. b(24) = 48 - CBool(L And &H80000)
  26. b(22) = 48 - CBool(L And &H100000)
  27. b(20) = 48 - CBool(L And &H200000)
  28. b(18) = 48 - CBool(L And &H400000)
  29. b(16) = 48 - CBool(L And &H800000)
  30. b(14) = 48 - CBool(L And &H1000000)
  31. b(12) = 48 - CBool(L And &H2000000)
  32. b(10) = 48 - CBool(L And &H4000000)
  33. b(8) = 48 - CBool(L And &H8000000)
  34. b(6) = 48 - CBool(L And &H10000000)
  35. b(4) = 48 - CBool(L And &H20000000)
  36. b(2) = 48 - CBool(L And &H40000000)
  37. ToBinYes = b
  38. End Function

Решайте сами, что важнее - скорость или лаконизм!

Ответить

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

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



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