МассивБитов
Стд::МассивБитов
Изменяемая конечная последовательность битов фиксированного размера. Бит с индексом 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