АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Булевские вектора и операции для работы с ними

Читайте также:
  1. III. Задания для работы в малых группах.
  2. III. Задания для самостоятельной работы
  3. XII. Порядок учета и отчетность работы групп досмотра
  4. Арифметические операции с выделениями
  5. Арматурные, опалубочные и бетонные работы.
  6. Аутсорсинг, как форма кооперации предприятий
  7. Бетонные работы
  8. Билет №17 режимы работы электрических систем
  9. В день операции
  10. В заключении выпускной квалифицированной работы обобщены результаты проведенного теоретического и практического исследования, сформулированы основные выводы.
  11. В какой последовательности проводятся работы по созданию системы СМК в соответствии со стандартами ИСО 9001-2000.

 

Напомним, что в VBA имеется тип Boolean - для хранения логических (булевых) значений, которые сохраняются как 16-разрядные (двухбайтовые) числа, но могут иметь только значения True или False. Переменные типа Boolean отображаются как строковые значения True или False при использовании метода Print. Для присваивания переменным логических значений ИСТИНА или ЛОЖЬ следует использовать ключевые слова True или False.

При преобразовании других числовых типов данных к типу Boolean значение 0 преобразуется в False, а все остальные значения преобразуются в True. Если значения типа Boolean преобразуются к другим типам данных, то False превращается в 0, а True в -1.По умолчанию значением булевской переменной является False- ложь.

Любое число можно представить в двоичном виде, а полученный набор нулей и единиц рассматривать как булевский вектор. Для получения представления числа в двоичном виде можно использовать следующий код:

Sub пример8()

Dim b As String

Dim s As Single

Dim a As Integer

b = ""

s = CSng(InputBox("Введи десятичное", "Ввод данных", 255))

Do While s > 0

a = s Mod 2#

b = CStr(a) + b

s = (s) \ 2#

Loop

MsgBox b, vbOKOnly, "Результат"

End Sub

Для преобразования двоичного представления числа в его десятичное значение можно использовать следующий код:

Sub пример9()

Dim b As String

Dim i As Integer, l As Integer, k As Integer, j As Integer

b = InputBox("Введи двоичное", "Ввод данных", 11111111)

l = Len(b)

i = 0

For k = l To 1 Step -1

j = CInt(Mid(b, k, 1))

i = i + j * 2 ^ (l - k)

Next

MsgBox i, vbOKOnly, "Результат"

End Sub

При работе с булевскими векторами часто приходится выделять из них конкретные разряды, тетрады (4 разряда), байты (2 тетрады) и слова (2 байта, 4 тетрады). Для этого применяются операции маскирования и/или сдвига. Маскирование представляет собой наложение на число (с помощью операции И) некоторой маски - числа, содержащего единицы в нужных разрядах и нули - в ненужных:

0001 0111 AND 0000 1111 = 0000 0111

Сдвиг представляет собой операцию добавления к числу слева или справа без изменения его разрядности указанного количества нулей. Вытолкнутые разряды при этом теряются:

0001 0111 SHL 4 = 0111 0000, 0001 0111 SHR 4 = 0000 0001

Для сдвига вправо двоичного представления числа b на i разрядов можно использовать код:

shr = Left(b, Len(b) - i)

Для сдвига влево двоичного представления числа b на i разрядов можно использовать код:

shl = Right(b, Len(b) - i)

shl=shl+String(i,"0")

Для работы с булевскими векторами применяются логические операции:

логические операции, используемые для выполнения логических операций

Рассмотрим пример: Выделить в двухбайтовом слове 1ю и 3ю тетрады и объединить их по исключающему ИЛИ.

Для решения этой задачи необходимо сохранить заданное число (больше 255) во вспомогательной переменной, ввести маску 0000 0000 0000 1111 для выделения 1 тетрады, перевести ее в десятичный вид и объединить ее по И с заданным числом, ввести маску 0000 1111 0000 0000 для выделения 3 тетрады, перевести ее в десятичный вид и объединить ее по И с копией заданного числа и сдвинуть вправо на 8 разрядов, после чего объединить полученные значения с помощью операции XOR. Представленная ниже программа использует процедуру tobin для получения двоичного представления числа и функции toint для перевода двоичного представления к десятичному значению и shr для сдвига вправо.

Sub пример10()

Dim a As Integer, b As Integer, m1 As Integer, m2 As Integer, rez As Integer

a = CInt(InputBox("Введи число", "Ввод данных", 256))

Call tobin(a): b = a

m1 = toint("111100000000")

m2 = toint("1111")

a = a And m1

Call tobin(a)

a = toint(shr(a, 8))

b = b And m2

Call tobin(b)

rez = a Xor b

Call tobin(rez)

End Sub

Контрольные вопросы

1. Что такое буалевские вектора, их описание и применеие в VBA?

2. Какие операции применяются для работы с булевскими векторами?

3. Как можно преобразовать тип Boolean в другой тип данных и наоборот?


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.005 сек.)