Представить массив из 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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д