Рейтинг@Mail.ru

Как использовать тип BitVector32 в .NET

Published in Полезные советы

Если нужно оперировать отдельными битами и секциями битов в 32-разрядных числах, в .NET существует тип System.Collections.Specialized.BitVector32. Его использование сводится к тому, что сначала необходимо определить секции и/или маски. Маски используются для оперирования отдельными битами, а секции – для оперирования группами битов внутри числа.

Dim b0 As Integer = BitVector32.CreateMask() 'инициализация битовых масок - нулевой (младший) бит
Dim b1 As Integer = BitVector32.CreateMask(b0) '1-ый бит
Dim b2 As Integer = BitVector32.CreateMask(b1) '2-ой бит
            
Dim s0 As BitVector32.Section = BitVector32.CreateSection(1)   'бит 0
Dim s6_1 As BitVector32.Section = BitVector32.CreateSection(&B11_1111, s0)  'биты 1..6
Dim s8_7 As BitVector32.Section = BitVector32.CreateSection(&B11, s6_1)  'биты 7..8
Dim s9 As BitVector32.Section = BitVector32.CreateSection(1, s7_8)  'бит 9

Dim s1 As BitVector32.Section = BitVector32.CreateSection(1, s0) 'бит 1
Dim s9_2 As BitVector32.Section = BitVector32.CreateSection(&B1111_1111, s1) 'биты 2..9

Пример использования секций битов:

Dim vector As New BitVector32(&HFFFF) 'создаём 32-битный вектор и инициализируем числом 0xFFFF
vector(s6_1) = 26 'задаём значение для секции битов 1..6
vector(s9) = 1 'задаём значение для секции 9, т.е. 9-го разряда

Для управления отдельными битами:

vector(b0) = 0 'задаём значение "0" младшего (0-го) бита
vector(b1) = 1 'задаём значение "1" для 1-го бита

vector(s1) = 1 'то же, что и предыдущая строка, только доступ через секцию

Если вы присвоите секции значение, большее, чем определено количеством битов в секции, «лишние» биты будут отрезаны. Например, при попытке записать в секцию s6_1 число 92 (0101_1100), оно будет урезано до 6-ти бит, т.е. получится число 28 (01_1100).

В .NET также существует тип BitArray, обладающий похожей функциональностью. Разница в том, что размер числа не ограничен 32-мя разрядами, а отдельные биты представлены типом Boolean. Из-за этого он занимает больше места в памяти. И он не позволяет создавать секции: вам придётся оперировать каждым битом отдельно. Но у него большая гибкость при создании, имеется несколько перегруженных версий конструктора под разные нужды.

Читать далее...

Утилита для расчёта XOR массива байтов

Published in Приложения

Предалагется маленькая утилита, которая выполняет только одну функцию – объединение по XOR массива байтов.

Вводить массив можно в любом формате с любым разделителем, главное чтобы числа были в 16-ном формате.

Скачать утилиту можно по ссылке ниже. Для запуска приложения необходима среда .NET 4.5.1.

Читать далее...

Калькулятор битовых операций

Published in Приложения

Данная программа позволяет быстро переводить числа из десятичной в двоичную и в шестнадцатеричную системы счисления и производить над ними битовые операции, такие как NOT, AND, OR и XOR, а также побитовый сдвиг.

Читать далее...
Subscribe to this RSS feed