Что такое битовый вектор?

Делиться заботой!

Вот что такое битовый вектор.

Битовый вектор подобен массиву битов.

Программы для Windows, мобильные приложения, игры - ВСЁ БЕСПЛАТНО, в нашем закрытом телеграмм канале - Подписывайтесь:)

Поэтому, если вы хотите подробно узнать, что такое битовый вектор и как его создать и использовать, то вы попали по адресу.

Давайте прыгать прямо в!

Что такое битовый вектор?

Понимание битовых векторов

Вы узнаете, что такое битовые векторы, как они выглядят и какие значения могут принимать их элементы.

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

Кроме того, библиотека битовых массивов Python позволяет более эффективно работать с битовыми векторами.

Наконец, преимущества и области применения битовых векторов.

Вы, наверное, знаете, что компьютеры хранят данные в виде нулей и единиц.

Синие цифровые двоичные данные на экране компьютера.

Для вычислений компьютеры используют двоичную систему счисления. В этой системе всего две цифры: 0 и 1.

Следовательно, чтобы закодировать любое число больше 1, необходимо использовать больше цифр. Вы должны закодировать число последовательностью нулей и единиц.

Один такой бит называется битом. Это одна цифра, которая говорит 1 или 0, да или нет, правда или ложь.

Структура, состоящая из нескольких битов, называется битовым вектором или битовым массивом.

Обычно языки программирования не обращаются к конкретному биту. Это ограничение связано с тем, как работают процессоры и регистры памяти.

Тем не менее, есть несколько способов манипулировать отдельными битами в битовом векторе.

Вот как:

Основные операции с битовыми векторами

Давайте рассмотрим основные операции с битовыми векторами.

Установка определенного бита в 1

Предположим, у вас есть битовый вектор:

бв = 1101011000010110

Вы хотите, чтобы значение места 4 было равно 1 (справа налево). Если бы это был просто массив, вы могли бы написать что-то вроде этого:

бв[4] = 1

Как упоминалось выше, большинство языков не позволяют вам это сделать. Но вы всегда можете использовать побитовое ИЛИ.

Побитовый ИЛИ на самом деле является стандартным функционально для подавляющего большинства языков программирования, включая Python.

1101011000010110 ИЛИ 0000000000001000 —— 1101011000011110

ИЛИ операции возвращают биты из исходного битового вектора для каждого 0 в битовой маске. Если битовая маска не говорит 1 немного. Затем этот бит возвращается как 1.

Установка определенного бита в 0

Точно так же вы можете установить определенный бит в 0, используя маску. Вам нужно использовать побитовое И оператор. В маске вы устанавливаете каждый бит равным 1, кроме целевого бита:

1101011000011110 И 1111111111110111 —— 1101011000010110

Проверка, равен ли конкретный бит 1

Вы можете сделать это с помощью побитового И а затем сравните результат с нулем:

1101011000010110 И 0000000000001000 —— 0000000000000000 == 0 -> бит не установлен в единицу 1101011000010110 И 0000000000000100 —— 0000000000000100! = 0 -> бит установлен в единицу

Инвертирование состояния определенного бита

Вы также можете инвертировать определенный бит. То есть переключите его на 0, если он был 1, или на 1, если он был 0. Для этого используйте побитовое исключающее ИЛИ:

110 101 100 0010110 Исключающее ИЛИ 000 000 000 0001000 —— 110 101 100 0011110

Инвертирование всего вектора

Вы также можете инвертировать целые битовые векторы. Для этого используйте побитовое НЕТ операция:

НЕ 1101011000010110 —— 0010100111101001

Простая реализация операций с битовыми векторами в Python

Давайте посмотрим, как это сделать в Python.

Для битовых векторов небольшой длины (до 128 бит) вы можете использовать целые числа, например, в образовательных целях. Легко показать число в двоичном формате с помощью f-строк:

>> bv = int (“1101011000010110″, 2) >> print(bv) 54806 >> print(f”{bv: 016b}”) 1101011000010110

В первой строке конструктор int используется с параметром 2 для преобразования строки в целое число.

Если вы распечатаете этот битовый вектор, вы получите 54806. Вы можете вывести любое число в двоичном формате, используя f-строку.

Ты устанавливаешь:

  • Формат вывода числа: б (двоичный)
  • Длина строки: 16
  • Как заполнить пустое пространство: 0

Вы можете узнать больше о f-струны здесь.

Для формирования маски можно использовать операцию сдвига битов:

  • Левый “шифт: <<
  • Правый сдвиг: >>

Давайте воспользуемся нашим примером и установим четвертый бит битового вектора равным 1. Для этого возьмем 1 и переместим его на 3 позиции влево.

Затем примените побитовое логическое ИЛИ (|) операция:

m = 1 << 3 res = bv | m print(f"{bv: 016b}") print("ИЛИ") print(f"{m: 016b}") print("-----------") print(f"{ рез : 016b}") 1101011000010110 ИЛИ 0000000000001000 ----------- 1101011000011110

Если вы хотите установить бит на 4-м месте и бит на 12-м месте в 1 параллельно, вы должны использовать битовый сдвиг и логический ИЛИ:

м = 1 << 3 | 1 << 11 рез = бв | m print(f"{bv: 016b}") print("ИЛИ") print(f"{m: 016b}") print("-----------") print(f"{ рез : 016b}") 1101011000010110 ИЛИ 0000100000001000 ----------- 1101111000011110

Как видите, битовые векторы обеспечивают параллельное выполнение. Вы устанавливаете два бита в 1 так же, как один бит. Только маска другая.

Давайте попробуем другой пример. Давайте установим третий бит bv равным нулю.

Сначала сделайте 16-битную маску. Для этого сдвиньте 1 на шестнадцать мест, чтобы получить 1 и шестнадцать 0: 10000000000000000.

Затем вычтите из этого числа единицу. Вы получаете шестнадцать двоичных единиц: 1111111111111111.

Чтобы понять, как это работает, давайте взглянем на меньшую маску:

Возьмем 1 и переместим его на 4 цифры влево: 10000. В десятичном виде это 16.

Вычтите один, и вы получите 15 в десятичном виде. И 1111 в двоичном виде: 8 + 4 + 2 + 1.

Далее побитовое исключающее ИЛИ (^) и установите третий бит маски равным нулю. После формирования маски примените побитовое И (&) операция:

m = ((1 << 16) - 1) ^ (1 << 2) res = bv & m print(f"{bv: 016b}") print("И") print(f"{m: 016b} ") print("-----------") print(f"{res : 016b}") 1101011000010110 И 1111111111111011 ----------- 1101011000010010

Наряду с операторами присваивания, такими как “=”, + =операторы | “=”, ^ =, “=” также работать в Python.

Эти операторы оценивают соответствующую операцию над исходным значением, а затем присваивают новое значение переменной.

Давайте рассмотрим несколько примеров:

>> bv = int (“1101011000010110”, 2) 1101011000010110

Установите 14-й бит в 1:

>> бв | = 1 << 13 1111011000010110

Установите 14-й бит в 0:

>> bv & = ~ (1 << 13) 1101011000010110

Переключить 16-й бит:

>> бв ^ = 1 << 15 0101011000010110

Библиотека для работы с битовыми векторами (Python)

Конечно, использовать тип int для битовых массивов неправильно; Python использует для этого тип bytearray.

Чтобы получить все преимущества растровых изображений, вы можете использовать существующие библиотеки с реализованными базовыми и расширенными операциями. Например, библиотека бинарный. Вы можете установить его с помощью следующей команды в терминале:

! pip установить битовый массив

Библиотека полностью реализована на C, поэтому вы можете быстро работать с растровыми изображениями. В то же время вы можете использовать битовые массивы, как обычные последовательности в Python:

  • Доступ по индексам
  • Сделать кусочки
  • Добавить элементы
  • Удалить элементы

Вот пример использования этой библиотеки для установки бита:

из битового массива импортировать битовый массив bv = битовый массив (“1101011000010110”) print(bv) bv[1] = 0 print(bv) битовый массив (‘1101011000010110’) битовый массив (‘1001011000010110’)

Видите, вы можете сделать это элементарным и очень интуитивным способом. Обратите внимание, как биты нумеруются слева направо и начинаются с нуля, как и во всех последовательностях Python.

Кроме того, эта библиотека позволяет использовать огромные битовые массивы, до двух гигабайт в 32-битной операционной системе.

Эта библиотека поддерживает:

  • Все побитовые бинарные операции для векторов
  • Последовательный поиск
  • Преобразование в другие форматы двоичных данных
  • И другие

Преимущества и использование битового вектора

Каковы преимущества битовых векторов и где вы их используете?

Во-первых, они очень компактны.

В одном байте можно хранить 8 независимых значений.

Поскольку компьютер может адресовать массив битов непосредственно в памяти, вы можете делать что угодно внутри массива битов, не используя доступ к памяти.

Растровые изображения обеспечивают параллельные вычисления. Вы можете изменить все биты в векторе или только один за одно и то же время.

Их преимущества диктуют применение битовых векторов. Например, они полезны для хранения групп логических флагов или упорядоченных последовательностей логических значений.

Вы также можете использовать битовые векторы в реализациях приоритизации, таких как операционная система Linux. Он часто использует битовые массивы для выделения различных структур памяти, таких как:

  • Иноды
  • Сектора диска
  • Страницы памяти

Также растровые изображения и операции с ними необходимы для построения компактных и лаконичных структур данных, для которых критично использовать наименьшее количество памяти.

Программы для Windows, мобильные приложения, игры - ВСЁ БЕСПЛАТНО, в нашем закрытом телеграмм канале - Подписывайтесь:)

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *