Перейти к основному содержимому

МассивБитов

Стд::МассивБитов

Изменяемая конечная последовательность битов фиксированного размера. Бит с индексом 0 является младшим. Размер массива задает допустимый диапазон индексов: 0 .. Размер() - 1.

Сравнение структурное: массивы считаются равными, если у них совпадают размер и значения битов с одинаковыми индексами.

Сравнение

Ссылочное

Иерархия типа​

Базовые типы: Объект


Операция []​

Изменяемый

Чтение и запись значения бита по индексу. При чтении возвращается текущее значение бита. При записи биту присваивается указанное значение.

ИсключениеИндексВнеГраниц - если Индекс не лежит в диапазоне 0 .. Размер() - 1.

Пример​

метод ПримерИндексатора(): Число
знч Массив = МассивБитов.ИзЧисла(0b0000, 4)
// Массив[1] = Истина
возврат Массив.ВЧисло()
;

Результат:

0b0010

Конструкторы​

МассивБитов​

МассивБитов()
Создает пустой битовый массив.

Перегрузка
МассивБитов(Размер: Число, Значение: Булево = Ложь)
МассивБитов(Источник: МассивБитов, Размер: Число? = Неопределено)

Примеры​

метод ПримерПустогоКонструктора(): Число
возврат новый МассивБитов().Размер()
;

Результат:

0

МассивБитов​

МассивБитов(
  Размер: Число,
  Значение: Булево = Ложь)
Создает битовый массив заданного размера и инициализирует все биты указанным значением. Если параметр Значение не задан, используется Ложь, то есть все биты создаются сброшенными. Если Значение = Истина, все биты становятся установленными.

Исключения​

ИсключениеНедопустимыйАргумент - если Размер < 0.

Перегрузка
МассивБитов()
МассивБитов(Источник: МассивБитов, Размер: Число? = Неопределено)

Примеры​

метод ПримерКонструктораСРазмером(): Число
возврат новый МассивБитов(4, Истина).ВЧисло() // все 4 бита сразу становятся установленными
;

Результат:

0b1111

МассивБитов​

МассивБитов(
  Источник: МассивБитов,
  Размер: Число? = Неопределено)
Создает новый битовый массив из Источник. Если Размер не задан, используется размер источника. Если Размер больше размера источника, недостающие старшие биты становятся сброшенными. Если Размер меньше размера источника, старшие биты отбрасываются.

Исключения​

ИсключениеНедопустимыйАргумент - если Размер < 0.

Перегрузка
МассивБитов()
МассивБитов(Размер: Число, Значение: Булево = Ложь)

Примеры​

метод ПримерКонструктораИзМассива(): Число
знч Источник = МассивБитов.ИзЧисла(0b101101, 6)
возврат новый МассивБитов(Источник, 4).ВЧисло() // старшие биты за пределами размера 4 отбрасываются
;

Результат:

0b1101

Методы​

БитоваяДлина​

БитоваяДлина(): Число
Возвращает минимальное количество битов, необходимое для представления текущего значения массива без ведущих нулей.

Примеры​

метод ПримерБитовойДлиныМассива(): Число
возврат МассивБитов.ИзЧисла(0b00101000, 8).БитоваяДлина()
;

Результат:

6

ВБайты​

ВБайты(Длина: Число? = Неопределено): Байты
Преобразует массив битов в байтовое представление. Если Длина не задана, возвращается минимально достаточная длина в байтах: ceil(Размер() / 8). Если Длина задана, результат имеет ровно указанную длину. При недостатке длины старшие байты отбрасываются, при избытке результат дополняется нулевыми старшими байтами.

Исключения​

ИсключениеНедопустимыйАргумент - если Длина < 0.

Примеры​

метод ПримерПреобразованияВБайты(): Число
знч Байты = МассивБитов.ИзЧисла(0b101011, 8).ВБайты() // получается один байт 00101011
возврат МассивБитов.ИзБайтов(Байты, 8).ВЧисло() // обратное преобразование восстанавливает то же значение
;

Результат:

0b00101011

ВСтроку​

ВСтроку(): Строка
Возвращает строковое двоичное представление массива битов. Длина строки всегда равна Размер(). Первый символ соответствует старшему биту массива, последний символ - младшему. Ведущие сброшенные биты сохраняются, поэтому строка подходит для отладки и визуального сравнения массивов одинакового размера. Если Размер() = 0, возвращается пустая строка.

Примеры​

метод ПримерПреобразованияВСтроку(): Строка
возврат МассивБитов.ИзЧисла(0b110001, 8).ВСтроку() // ведущие нули сохраняются
;

Результат:

00110001

ВЧисло​

ВЧисло(Положительное: Булево = Истина): Число
Преобразует массив битов в число. Если Положительное = Истина, значение интерпретируется как неотрицательное. Если Положительное = Ложь, значение интерпретируется как число в дополнительном коде относительно текущего размера массива. Это позволяет корректно восстановить отрицательное число из фиксированной разрядности.

Примеры​

метод ПримерПреобразованияВЧисло(): Число
возврат МассивБитов.ИзЧисла(-5, 8).ВЧисло(Ложь) // значение читается как число в дополнительном коде
;

Результат:

-5

ВсеБитыСброшены​

ВсеБитыСброшены(): Булево
Проверяет, что в массиве нет ни одного установленного бита.

Примеры​

метод ПримерВсеБитыСброшены(): Булево
возврат новый МассивБитов(4, Ложь).ВсеБитыСброшены()
;

Результат:

Истина

ИзБайтов​

Статический

ИзБайтов(
  Источник: Байты,
  Размер: Число? = Неопределено
): МассивБитов
Создает новый битовый массив из байтов. Если Размер не задан, используется Источник.Размер() * 8. Если Размер больше, недостающие старшие биты становятся сброшенными. Если Размер меньше, старшие биты отбрасываются.

Исключения​

ИсключениеНедопустимыйАргумент - если Размер < 0.

Примеры​

метод ПримерИзБайтов(): Число
знч Байты = МассивБитов.ИзЧисла(0b101011, 8).ВБайты()
возврат МассивБитов.ИзБайтов(Байты, 8).ВЧисло() // порядок битов и байтов сохраняется
;

Результат:

0b00101011

ИзЧисла​

Статический

ИзЧисла(
  Источник: Число,
  Размер: Число? = Неопределено
): МассивБитов
Создает новый битовый массив из числа. Если Источник неотрицательный и Размер не задан, используется минимальная битовая длина двоичного представления источника. Если Источник отрицательный, Размер должен быть задан явно. В этом случае используется представление в дополнительном коде в рамках заданной разрядности. Если Размер задан, результат имеет ровно указанную длину: недостающие старшие биты становятся сброшенными, а лишние старшие биты отбрасываются.

Исключения​

ИсключениеНедопустимыйАргумент - если Размер < 0.

Примеры​

метод ПримерИзЧисла(): Число
возврат МассивБитов.ИзЧисла(0b101011, 8).ВЧисло() // число дополняется до 8 битов ведущими нулями
;

Результат:

0b00101011

ИнвертироватьБит​

ИнвертироватьБит(Индекс: Число): МассивБитов
Инвертирует значение бита по индексу. Возвращает этот же экземпляр МассивБитов.

Исключения​

ИсключениеИндексВнеГраниц - если Индекс не лежит в диапазоне 0 .. Размер() - 1.

Примеры​

метод ПримерИнвертироватьБит(): Число
знч Массив = МассивБитов.ИзЧисла(0b1010, 4)
Массив.ИнвертироватьБит(1)
возврат Массив.ВЧисло()
;

Результат:

0b1000

ИнвертироватьБиты​

ИнвертироватьБиты(
  От: Число,
  До: Число
): МассивБитов
Инвертирует все биты диапазона [От, До). Установленные биты становятся сброшенными, а сброшенные - установленными. Возвращает этот же экземпляр МассивБитов.

Исключения​

ИсключениеИндексВнеГраниц - если диапазон задан неверно или выходит за границы массива.

Примеры​

метод ПримерИнвертироватьБиты(): Число
знч Массив = МассивБитов.ИзЧисла(0b00111100, 8)
Массив.ИнвертироватьБиты(3, 5)
возврат Массив.ВЧисло()
;

Результат:

0b00100100

ПобитовоеИ​

ПобитовоеИ(Источник: МассивБитов|Байты|Число): МассивБитов
Выполняет побитовую операцию И между текущим массивом и Источник. Представление Источник приводится к текущему размеру массива: недостающие старшие биты считаются сброшенными, лишние старшие биты игнорируются. Возвращает этот же экземпляр МассивБитов.

Исключения​

ИсключениеНедопустимыйАргумент - если в Источник передано нецелое или отрицательное Число.

Примеры​

метод ПримерПобитовогоИ(): Число
знч Массив = МассивБитов.ИзЧисла(0b11110000, 8)
Массив.ПобитовоеИ(0b00111100)
возврат Массив.ВЧисло()
;

Результат:

0b00110000

ПобитовоеИНе​

ПобитовоеИНе(Источник: МассивБитов|Байты|Число): МассивБитов
Выполняет побитовую операцию И НЕ, то есть ТекущийМассив & ~Источник. Представление Источник приводится к текущему размеру массива. Возвращает этот же экземпляр МассивБитов.

Исключения​

ИсключениеНедопустимыйАргумент - если в Источник передано нецелое или отрицательное Число.

Примеры​

метод ПримерПобитовогоИНе(): Число
знч Массив = МассивБитов.ИзЧисла(0b11110000, 8)
Массив.ПобитовоеИНе(0b00111100)
возврат Массив.ВЧисло()
;

Результат:

0b11000000

ПобитовоеИли​

ПобитовоеИли(Источник: МассивБитов|Байты|Число): МассивБитов
Выполняет побитовую операцию ИЛИ между текущим массивом и Источник. Представление Источник приводится к текущему размеру массива. Возвращает этот же экземпляр МассивБитов.

Исключения​

ИсключениеНедопустимыйАргумент - если в Источник передано нецелое или отрицательное Число.

Примеры​

метод ПримерПобитовогоИли(): Число
знч Массив = МассивБитов.ИзЧисла(0b11110000, 8)
Массив.ПобитовоеИли(0b00111100)
возврат Массив.ВЧисло()
;

Результат:

0b11111100

ПобитовоеИсключающееИли​

ПобитовоеИсключающееИли(Источник: МассивБитов|Байты|Число): МассивБитов
Выполняет побитовую операцию XOR между текущим массивом и Источник. Представление Источник приводится к текущему размеру массива. Возвращает этот же экземпляр МассивБитов.

Исключения​

ИсключениеНедопустимыйАргумент - если в Источник передано нецелое или отрицательное Число.

Примеры​

метод ПримерПобитовогоИсключительногоИли(): Число
знч Массив = МассивБитов.ИзЧисла(0b11110000, 8)
Массив.ПобитовоеИсключающееИли(0b00111100)
возврат Массив.ВЧисло()
;

Результат:

0b11001100

ПобитовоеНе​

ПобитовоеНе(): МассивБитов
Выполняет побитовую операцию НЕ для текущего массива. Возвращает этот же экземпляр МассивБитов.

Примеры​

метод ПримерПобитовогоНе(): Число
знч Массив = МассивБитов.ИзЧисла(0b11110000, 8)
Массив.ПобитовоеНе()
возврат Массив.ВЧисло()
;

Результат:

0b00001111

ПобитовыйАрифметическийСдвигВправо​

ПобитовыйАрифметическийСдвигВправо(Смещение: Число): МассивБитов
Выполняет арифметический сдвиг вправо на заданное количество позиций. Освободившиеся старшие биты получают значение знакового бита, то есть старшего бита текущего массива. В отличие от логического сдвига вправо, освободившиеся старшие биты могут становиться установленными, если старший бит массива был установлен. Если Смещение >= Размер(), весь массив заполняется сброшенными или установленными битами в зависимости от текущего старшего бита. Возвращает этот же экземпляр МассивБитов.

Исключения​

ИсключениеНедопустимыйАргумент - если Смещение < 0.

Примеры​

метод ПримерПобитовогоАрифметическогоСдвигаВправо(): Число
знч Массив = МассивБитов.ИзЧисла(-16, 8)
Массив.ПобитовыйАрифметическийСдвигВправо(2)
возврат Массив.ВЧисло(Ложь)
;

Результат:

-4

ПобитовыйЛогическийСдвигВправо​

ПобитовыйЛогическийСдвигВправо(Смещение: Число): МассивБитов
Выполняет логический сдвиг вправо на заданное количество позиций. Освободившиеся старшие биты становятся сброшенными. В отличие от арифметического сдвига вправо, значение старшего бита массива при заполнении не учитывается. Если Смещение >= Размер(), все биты массива сбрасываются, а размер сохраняется. Возвращает этот же экземпляр МассивБитов.

Исключения​

ИсключениеНедопустимыйАргумент - если Смещение < 0.

Примеры​

метод ПримерПобитовогоЛогическогоСдвигаВправо(): Число
знч Массив = МассивБитов.ИзЧисла(0b10110000, 8)
Массив.ПобитовыйЛогическийСдвигВправо(3)
возврат Массив.ВЧисло()
;

Результат:

0b00010110

ПобитовыйСдвигВлево​

ПобитовыйСдвигВлево(Смещение: Число): МассивБитов
Выполняет побитовый сдвиг влево на заданное количество позиций. Освободившиеся младшие биты становятся сброшенными, а биты, выходящие за границу текущего размера массива, отбрасываются. Если Смещение >= Размер(), все биты массива сбрасываются, а размер сохраняется. Возвращает этот же экземпляр МассивБитов.

Исключения​

ИсключениеНедопустимыйАргумент - если Смещение < 0.

Примеры​

метод ПримерПобитовогоСдвигаВлево(): Число
знч Массив = МассивБитов.ИзЧисла(0b00101100, 8)
Массив.ПобитовыйСдвигВлево(2)
возврат Массив.ВЧисло()
;

Результат:

0b10110000

ПодМассив​

ПодМассив(
  От: Число,
  До: Число
): МассивБитов
Возвращает копию подмассива, содержащую биты диапазона [От, До). Размер результата равен До - От. Бит с индексом От в исходном массиве становится младшим битом результата.

Исключения​

ИсключениеИндексВнеГраниц - если диапазон задан неверно или выходит за границы массива.

Примеры​

метод ПримерПодМассива(): Число
знч Массив = МассивБитов.ИзЧисла(0b10111001, 8)
возврат Массив.ПодМассив(0, 4).ВЧисло() // в результат попадают четыре младших бита 1001
;

Результат:

0b1001

Получить​

Получить(Индекс: Число): Булево
Проверяет состояние бита по индексу. По смыслу эквивалентно чтению через индексатор Массив[Индекс].

Исключения​

ИсключениеИндексВнеГраниц - если Индекс не лежит в диапазоне 0 .. Размер() - 1.

Примеры​

метод ПримерПолучитьБит(): Булево
возврат МассивБитов.ИзЧисла(0b1010, 4).Получить(3) // проверяется старший бит массива 1010
;

Результат:

Истина

ПредыдущийСброшенныйБит​

ПредыдущийСброшенныйБит(От: Число): Число
Найти индекс ближайшего сброшенного бита влево, начиная с индекса От. Возвращает индекс найденного бита или -1, если сброшенный бит не найден.

Исключения​

ИсключениеИндексВнеГраниц - если От < 0 или От >= Размер().

Примеры​

метод ПримерПредыдущегоСброшенногоБита(): Число
знч Массив = МассивБитов.ИзЧисла(0b11101111, 8)
возврат Массив.ПредыдущийСброшенныйБит(6)
;

Результат:

4

ПредыдущийУстановленныйБит​

ПредыдущийУстановленныйБит(От: Число): Число
Найти индекс ближайшего установленного бита влево, начиная с индекса От. Возвращает индекс найденного бита или -1, если установленный бит не найден.

Исключения​

ИсключениеИндексВнеГраниц - если От < 0 или От >= Размер().

Примеры​

метод ПримерПредыдущегоУстановленногоБита(): Число
знч Массив = МассивБитов.ИзЧисла(0b01001000, 8)
возврат Массив.ПредыдущийУстановленныйБит(5)
;

Результат:

3

ПроверитьБиты​

ПроверитьБиты(
  От: Число,
  До: Число,
  Значение: Булево = Истина
): Булево
Проверяет, что все биты в диапазоне [От, До) имеют заданное значение. Если Значение = Истина, проверяются установленные биты. Если Значение = Ложь, проверяются сброшенные биты. Пустой диапазон считается корректным и возвращает Истина.

Исключения​

ИсключениеИндексВнеГраниц - если диапазон задан неверно или выходит за границы массива.

Примеры​

метод ПримерПроверитьБиты(): Булево
знч Массив = МассивБитов.ИзЧисла(0b00111100, 8)
возврат Массив.ПроверитьБиты(0, 2, Ложь) // проверяются два младших сброшенных бита
;

Результат:

Истина

ПроверитьПоБитовойМаске​

ПроверитьПоБитовойМаске(Маска: МассивБитов|Байты|Число): Булево
Проверяет, что все биты, установленные в Маске, также установлены в текущем массиве. При разной длине представлений более короткое дополняется сброшенными старшими битами. Для числовой маски допускаются только целые неотрицательные значения.

Исключения​

ИсключениеНедопустимыйАргумент - если в Маске передано нецелое или отрицательное Число.

Примеры​

метод ПримерПроверитьПоБитовойМаскеМассива(): Булево
знч Массив = МассивБитов.ИзЧисла(0b10110100, 8)
возврат Массив.ПроверитьПоБитовойМаске(0b00100100) // оба бита из маски установлены и в массиве
;

Результат:

Истина

Пусто​

Пусто(): Булево
Проверяет, что размер массива равен 0.

Примеры​

метод ПримерПусто(): Булево
возврат новый МассивБитов().Пусто()
;

Результат:

Истина

Размер​

Размер(): Число
Возвращает текущий размер массива битов.

Примеры​

метод ПримерРазмера(): Число
возврат новый МассивБитов(8, Ложь).Размер()
;

Результат:

8

Сбросить​

Сбросить(): МассивБитов
Сбрасывает все установленные биты массива. Размер массива после вызова не изменяется. Возвращает этот же экземпляр МассивБитов.

Примеры​

метод ПримерСбросить(): Булево
знч Массив = МассивБитов.ИзЧисла(0b1111, 4)
Массив.Сбросить()
возврат Массив.ВсеБитыСброшены()
;

Результат:

Истина

СледующийСброшенныйБит​

СледующийСброшенныйБит(От: Число): Число
Найти индекс первого сброшенного бита, начиная с индекса От. Возвращает индекс найденного бита или -1, если сброшенный бит не найден.

Исключения​

ИсключениеИндексВнеГраниц - если От < 0 или От > Размер().

Примеры​

метод ПримерСледующегоСброшенногоБита(): Число
знч Массив = МассивБитов.ИзЧисла(0b11101111, 8)
возврат Массив.СледующийСброшенныйБит(0)
;

Результат:

4

СледующийУстановленныйБит​

СледующийУстановленныйБит(От: Число): Число
Найти индекс первого установленного бита, начиная с индекса От. Возвращает индекс найденного бита или -1, если установленный бит не найден.

Исключения​

ИсключениеИндексВнеГраниц - если От < 0 или От > Размер().

Примеры​

метод ПримерСледующегоУстановленногоБита(): Число
знч Массив = МассивБитов.ИзЧисла(0b01001000, 8)
возврат Массив.СледующийУстановленныйБит(0)
;

Результат:

3

Установить​

Установить(
  Индекс: Число,
  Значение: Булево = Истина
): МассивБитов
Устанавливает значение бита по индексу. Если параметр Значение не задан, используется Истина. По смыслу эквивалентно записи через индексатор Массив[Индекс] = Значение. Возвращает этот же экземпляр МассивБитов.

Исключения​

ИсключениеИндексВнеГраниц - если Индекс не лежит в диапазоне 0 .. Размер() - 1.

Примеры​

метод ПримерУстановитьБит(): Число
знч Массив = МассивБитов.ИзЧисла(0b0000, 4)
Массив.Установить(2) // Значение не задано, поэтому бит устанавливается в Истина
возврат Массив.ВЧисло()
;

Результат:

0b0100

УстановитьБиты​

УстановитьБиты(
  От: Число,
  До: Число,
  Значение: Булево = Истина
): МассивБитов
Устанавливает все биты диапазона [От, До) в указанное значение. Если параметр Значение не задан, все биты диапазона становятся установленными. Возвращает этот же экземпляр МассивБитов.

Исключения​

ИсключениеИндексВнеГраниц - если диапазон задан неверно или выходит за границы массива.

Примеры​

метод ПримерУстановитьБиты(): Число
знч Массив = МассивБитов.ИзЧисла(0b00000000, 8)
Массив.УстановитьБиты(2, 6) // Значение не задано, поэтому диапазон заполняется установленными битами
возврат Массив.ВЧисло()
;

Результат:

0b00111100

УстановитьРазмер​

УстановитьРазмер(Размер: Число): МассивБитов
Изменяет размер текущего массива. Если новый размер больше текущего, новые старшие биты становятся сброшенными. Если новый размер меньше текущего, старшие биты отбрасываются. Возвращает этот же экземпляр МассивБитов.

Исключения​

ИсключениеНедопустимыйАргумент - если Размер < 0.

Примеры​

метод ПримерУстановитьРазмер(): Число
знч Массив = МассивБитов.ИзЧисла(0b00001111, 8)
Массив.УстановитьРазмер(4)
возврат Массив.Размер()
;

Результат:

4

ЦиклическийСдвигВлево​

ЦиклическийСдвигВлево(Смещение: Число): МассивБитов
Выполняет циклический сдвиг всех битов влево на заданное количество позиций. Сдвиг выполняется в пределах текущего размера массива. В отличие от обычного побитового сдвига, биты, выходящие за старшую границу массива, не отбрасываются, а переносятся в младшие позиции. Возвращает этот же экземпляр МассивБитов.

Исключения​

ИсключениеНедопустимыйАргумент - если Смещение < 0.

Примеры​

метод ПримерЦиклическогоСдвигаВлево(): Число
знч Массив = МассивБитов.ИзЧисла(0b10010000, 8)
Массив.ЦиклическийСдвигВлево(2)
возврат Массив.ВЧисло()
;

Результат:

0b01000010

ЦиклическийСдвигВправо​

ЦиклическийСдвигВправо(Смещение: Число): МассивБитов
Выполняет циклический сдвиг всех битов вправо на заданное количество позиций. Сдвиг выполняется в пределах текущего размера массива. В отличие от обычного побитового сдвига, биты, выходящие за младшую границу массива, не отбрасываются, а переносятся в старшие позиции. Возвращает этот же экземпляр МассивБитов.

Исключения​

ИсключениеНедопустимыйАргумент - если Смещение < 0.

Примеры​

метод ПримерЦиклическогоСдвигаВправо(): Число
знч Массив = МассивБитов.ИзЧисла(0b10010000, 8)
Массив.ЦиклическийСдвигВправо(2)
возврат Массив.ВЧисло()
;

Результат:

0b00100100

Список унаследованных методов​

Объект​

ВСтроку (Переопределение)

ПолучитьТип

Представление