Представить массив из 16 значений (типа True и False) в виде Long, а затем раскодировать обратно - VBA

Узнай цену своей работы

Формулировка задачи:

Решаю сейчас одну задачу для

MS Access

. У меня есть таблица, в которой может быть до нескольких десятков миллионов строк. Промежуточные вычисления требуют охарактеризовать каждую запись по нескольким характеристикам (в данной задаче 16 таких характеристик). Каждая характеристика принимает значения

True

и

False

. Я бы мог просто вставить в таблицу 16 дополнительных полей типа

Boolean

(который, как и

Integer

, занимает 4 байта). Но учитывая, что Access ограничивает размер базы 2 Гб, а это не единственная таблица в базе, такое решение мне кажется сильно не оптимальным. Очевидно, что

True

и

False

по 16-ти позициям можно представить в двоичном виде как:0100 1101 1011 1101 Этой записи можно сопоставить эквивалентное значение типа

Long

. Вопрос в том, как быстро перегонять массив из 16-ти

True

и

False

в

Long

и обратно?

Решение задачи: «Представить массив из 16 значений (типа True и False) в виде Long, а затем раскодировать обратно»

textual
Листинг программы
Option Explicit
 
Dim bits(0 To 15) As Integer
 
Sub InitBits()
  Dim i&, j&
  j = 1
  For i = 0 To 14
    bits(i) = j
    j = j + j
  Next
  bits(15) = &H8000
End Sub
 
Function Int2Bool(i As Integer) As Boolean()
Dim n&
  ReDim b(0 To 15) As Boolean
  For n = 0 To 15
    If bits(n) And i Then b(n) = True
  Next
  Int2Bool = b
End Function
 
Function Bool2Int(b() As Boolean) As Integer
Dim n&
  For n = 0 To 15
    If b(n) Then Bool2Int = Bool2Int + bits(n)
  Next
End Function
 
Sub test()
Dim j&, t!
  t = Timer
  InitBits
  For j = -32768 To 32767
    If Bool2Int(Int2Bool((j))) <> j Then Stop
  Next
  Debug.Print Timer - t
End Sub

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.083 из 5
Похожие ответы