4.5 Побитовые операции
Octave предоставляет ряд функций для побитовой обработки числовых значений. Основные функции для установки и получения значений отдельных битов — bitset и bitget.
-
:
B =bitset(A, n) -
:
B =bitset(A, n, val) -
Установить или сбросить бит(ы) в позиции n беззнаковых целых чисел в A.
Младший значащий бит имеет номер n = 1. Значение val = 0 сбрасывает биты, а val = 1 устанавливает их. Если val не задано, по умолчанию используется значение 1 (установить бит). Все входные данные должны иметь одинаковый размер или быть скалярами.
Пример 1: установить несколько битов
x = bitset (1, 3:5) ⇒ x = 5 9 17 dec2bin (x) ⇒ 00101 01001 10001Пример 2: сбросить и установить биты
x = bitset ([15 14], 1, [0 1]) ⇒ x = 14 15
См. также: bitand, bitor, bitxor, bitget, bitcmp, bitshift, intmax, flintmax.
-
:
b =bitget(A, n) -
Вернуть значение бита(ов) в позиции(ях) n беззнаковых целых чисел в A.
Младший значащий бит имеет номер n = 1.
bitget (100, 8:-1:1) ⇒ 0 1 1 0 0 1 0 0
См. также: bitand, bitor, bitxor, bitset, bitcmp, bitshift, intmax, flintmax.
Аргументы всех побитовых операций Octave могут быть скалярами или массивами, за исключением bitcmp, аргумент k которого должен быть скаляром. Если массивами являются несколько аргументов, все они должны иметь одинаковую форму, и побитовый оператор применяется отдельно к каждому элементу каждого аргумента. Если один аргумент является скаляром, а другой — массивом, скалярный аргумент дублируется. Поэтому
bitget (100, 8:-1:1)
эквивалентно
bitget (100 * ones (1, 8), 8:-1:1)
Следует отметить, что все значения, передаваемые функциям побитовой обработки Octave, рассматриваются как целые числа. Поэтому, хотя в приведенном выше примере для bitset передается число с плавающей точкой 10, оно рассматривается как биты [1, 0, 1, 0], а не как биты представления 10 в собственном формате с плавающей точкой.
Поскольку максимальное значение, которое может быть представлено числом, важно для побитовой обработки, особенно при создании масок, в Octave предусмотрены две вспомогательные функции: flintmax для целых чисел с плавающей точкой и intmax для целочисленных объектов (uint8, int64 и т. д.).
В Octave также реализованы базовые побитовые операторы «И», «ИЛИ» и «исключающее ИЛИ».
-
:
z =bitand(x, y) -
Вернуть побитовое И для неотрицательных целых чисел.
x, y должны находиться в диапазоне [0,intmax]
См. также: bitor, bitxor, bitset, bitget, bitcmp, bitshift, intmax, flintmax.
-
:
z =bitor(x, y) -
Вернуть побитовое ИЛИ для неотрицательных целых чисел x и y.
См. также: bitor, bitxor, bitset, bitget, bitcmp, bitshift, intmax, flintmax.
-
:
z =bitxor(x, y) -
Вернуть побитовое исключающее ИЛИ для неотрицательных целых чисел x и y.
См. также: bitand, bitor, bitset, bitget, bitcmp, bitshift, intmax, flintmax.
Побитовый оператор «НЕ» — это унарный оператор, который выполняет логическое отрицание каждого бита значения. Чтобы эта операция имела смысл, необходимо определить маску, относительно которой инвертируется значение. Побитовый оператор «НЕ» в Octave — bitcmp.
-
:
C =bitcmp(A, k) -
Вернуть k-битное дополнение целых чисел в A.
Если k не задано, предполагается
k = log2 (flintmax) + 1.bitcmp (7,4) ⇒ 8 dec2bin (11) ⇒ 1011 dec2bin (bitcmp (11, 6)) ⇒ 110100
См. также: bitand, bitor, bitxor, bitset, bitget, bitcmp, bitshift, flintmax.
В Octave также предусмотрен побитовый сдвиг значений влево и вправо.
-
:
B =bitshift(A, k) -
:
B =bitshift(A, k, n) -
Вернуть результат сдвига на k бит беззнаковых целых чисел в A, состоящих из n цифр.
Положительное значение k приводит к сдвигу влево, отрицательное — к сдвигу вправо.
Если n не задано, по умолчанию используется значение 64. n должно находиться в диапазоне [1,64].
bitshift (eye (3), 1) ⇒ 2 0 0 0 2 0 0 0 2 bitshift (10, [-2, -1, 0, 1, 2]) ⇒ 2 5 10 20 40
См. также: bitand, bitor, bitxor, bitset, bitget, bitcmp, intmax, flintmax.
Биты, сдвинутые за любой из концов значения, теряются. Octave также использует арифметические сдвиги, при которых знаковый бит значения сохраняется при сдвиге вправо. Например:
bitshift (-10, -1) ⇒ -5 bitshift (int8 (-1), -1) ⇒ -1
Обратите внимание, что bitshift (int8 (-1), -1) — это -1, поскольку битовое представление -1 в типе данных int8 имеет вид [1, 1,
1, 1, 1, 1, 1, 1].
© 1996–2026 The Octave Project Developers
Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies.
Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions.
https://docs.octave.org/v9.4.0/Bit-Manipulations.html