Битовые функции
Битовые функции работают для любой пары типов из UInt8
, UInt16
, UInt32
, UInt64
, Int8
, Int16
, Int32
, Int64
, Float32
или Float64
. Некоторые функции поддерживают типы String
и FixedString
.
Тип результата - это целое число с битами, равными максимальному количеству битов его аргументов. Если хотя бы один из аргументов знаковый, результат будет знаковым числом. Если аргумент является числом с плавающей запятой, он приводится к Int64.
bitAnd
Введено в: v1.1
Выполняет побитовую операцию AND между двумя значениями.
Синтаксис
Аргументы
Возвращаемое значение
Возвращает результат побитовой операции a AND b
Примеры
Пример использования
bitCount
Введено в: v20.3
Вычисляет количество битов, установленных в единицу в двоичном representation числа.
Синтаксис
Аргументы
Возвращаемое значение
Возвращает количество битов, установленных в единицу в x
. UInt8
.
Функция не преобразует входное значение в больший тип (расширение знака).
Например: bitCount(toUInt8(-1)) = 8
.
Примеры
Пример использования
bitHammingDistance
Введено в: v21.1
Возвращает расстояние Хэмминга между битовыми представлениями двух чисел.
Может использоваться с функциями SimHash
для обнаружения полудублирующих строк.
Чем меньше расстояние, тем более похожи строки.
Синтаксис
Аргументы
x
— Первое число для расчета расстояния Хэмминга.(U)Int*
илиFloat*
y
— Второе число для расчета расстояния Хэмминга.(U)Int*
илиFloat*
Возвращаемое значение
Возвращает расстояние Хэмминга между x
и y
UInt8
Примеры
Пример использования
bitNot
Введено в: v1.1
Выполняет побитовую операцию NOT.
Синтаксис
Аргументы
Возвращаемое значение
Возвращает результат ~a
, т.е. a
с инвертированными битами.
Примеры
Пример использования
bitOr
Введено в: v1.1
Выполняет побитовую операцию OR между двумя значениями.
Синтаксис
Аргументы
Возвращаемое значение
Возвращает результат побитовой операции a OR b
Примеры
Пример использования
bitRotateLeft
Введено в: v1.1
Сдвигает биты влево на определенное количество позиций. Биты, которые выходят за пределы, оборачиваются вправо.
Синтаксис
Аргументы
a
— Значение, которое нужно вращать.(U)Int8/16/32/64
N
— Количество позиций для вращения влево.UInt8/16/32/64
Возвращаемое значение
Возвращает сдвинутое значение с типом, равным типу a
. (U)Int8/16/32/64
Примеры
Пример использования
bitRotateRight
Введено в: v1.1
Сдвигает биты вправо на определенное количество позиций. Биты, которые выходят за пределы, оборачиваются влево.
Синтаксис
Аргументы
a
— Значение, которое нужно вращать.(U)Int8/16/32/64
N
— Количество позиций для вращения вправо.UInt8/16/32/64
Возвращаемое значение
Возвращает сдвинутое значение с типом, равным типу a
. (U)Int8/16/32/64
Примеры
Пример использования
bitShiftLeft
Введено в: v1.1
Сдвигает двоичное представление значения влево на заданное количество битовых позиций.
FixedString
или String
рассматриваются как одно многобайтовое значение.
Биты значения FixedString
теряются при сдвиге.
С другой стороны, значение String
дополняется дополнительными байтами, поэтому битов не теряется.
Синтаксис
Аргументы
a
— Значение для сдвига.(U)Int*
илиString
илиFixedString
N
— Количество позиций для сдвига.UInt8/16/32/64
Возвращаемое значение
Возвращает смещенное значение с типом, равным типу a
.
Примеры
Пример использования с двоичным кодированием
Пример использования с шестнадцатеричным кодированием
Пример использования с кодированием Fixed String
bitShiftRight
Введено в: v1.1
Сдвигает двоичное представление значения вправо на заданное количество битовых позиций.
FixedString
или String
рассматриваются как одно многобайтовое значение.
Биты значения FixedString
теряются при сдвиге.
С другой стороны, значение String
дополняется дополнительными байтами, поэтому битов не теряется.
Синтаксис
Аргументы
a
— Значение для сдвига.(U)Int*
илиString
илиFixedString
N
— Количество позиций для сдвига.UInt8/16/32/64
Возвращаемое значение
Возвращает смещенное значение с типом, равным типу a
.
Примеры
Пример использования с двоичным кодированием
Пример использования с шестнадцатеричным кодированием
Пример использования с кодированием Fixed String
bitSlice
Введено в: v22.2
Возвращает подстроку, начиная с бита с индекса 'offset', длина которой составляет 'length' бит.
Синтаксис
Аргументы
-
s
— Строка или Fixed String для нарезки.String
илиFixedString
-
offset
— Возвращает начальную позицию бита (индексация с 1). -
Положительные значения: подсчет от начала строки.
-
Отрицательные значения: подсчет от конца строки.
-
length
— Необязательный. Количество битов для извлечения. -
Положительные значения: извлекает
length
битов. -
Отрицательные значения: извлекает от смещения до
(string_length - |length|)
. -
Пропущено: извлекает от смещения до конца строки.
-
Если длина не кратна 8, результат дополняется нулями справа.
(U)Int8/16/32/64
илиFloat*
Возвращаемое значение
Возвращает строку, содержащую извлеченные биты, представленные в виде двоичной последовательности. Результат всегда дополняется до границ байта (кратные 8 битам) String
Примеры
Пример использования
bitTest
Введено в: v1.1
Принимает любое число и преобразует его в двоичную форму, затем возвращает значение бита в указанной позиции. Нумерация ведется справа налево, начиная с 0.
Синтаксис
Аргументы
a
— Число для преобразования.(U)Int8/16/32/64
илиFloat*
i
— Позиция бита для возврата.(U)Int8/16/32/64
илиFloat*
Возвращаемое значение
Возвращает значение бита в позиции i
в двоичном представлении a
UInt8
Примеры
Пример использования
bitTestAll
Введено в: v1.1
Возвращает результат логического конъюнкции (оператор AND) всех битов в заданных позициях. Счёт ведётся справа налево, начиная с 0.
Логическое И между двумя битами истинно, если и только если оба входных бита истинны.
Синтаксис
Аргументы
a
— Целочисленное значение.(U)Int8/16/32/64
index1, ...
— Одна или несколько позиций битов.(U)Int8/16/32/64
Возвращаемое значение
Возвращает результат логического умножения UInt8
Примеры
Пример использования 1
Пример использования 2
bitTestAny
Введено в: v1.1
Возвращает результат логической дизъюнкции (оператор OR) всех битов в заданных позициях числа. Счёт ведётся справа налево, начиная с 0.
Логическое ИЛИ между двумя битами истинно, если хотя бы один из входных битов истинен.
Синтаксис
Аргументы
a
— Целочисленное значение.(U)Int8/16/32/64
index1, ...
— Одна или несколько позиций битов.(U)Int8/16/32/64
Возвращаемое значение
Возвращает результат логической суммы UInt8
Примеры
Пример использования 1
Пример использования 2
bitXor
Введено в: v1.1
Выполняет побитовую операцию исключающее ИЛИ (XOR) между двумя значениями.
Синтаксис
Аргументы
Возвращаемое значение
Возвращает результат побитовой операции a XOR b
Примеры
Пример использования