Spec-Zone.ru › Octave 7

4.5 Битовые операции

Octave предоставляет ряд функций для обработки числовых значений побитово. Основные функции для установки и получения значений отдельных битов — bitset и bitget.

: C = bitset (A, n) ¶
: C = 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.

: c = 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 также включает основные побитовые операции "и", "или" и "исключающее или".

: bitand (x, y) ¶

Возвращает побитовую операцию "и" для неотрицательных целых чисел.

x, y должны быть в диапазоне [0,intmax]

См. также: bitor, bitxor, bitset, bitget, bitcmp, bitshift, intmax, flintmax.

: bitor (x, y) ¶

Возвращает побитовую операцию "или" для неотрицательных целых чисел x и y.

См. также: bitor, bitxor, bitset, bitget, bitcmp, bitshift, intmax, flintmax.

: bitxor (x, y) ¶

Возвращает побитовую операцию "исключающее или" для неотрицательных целых чисел x и y.

См. также: bitand, bitor, bitset, bitget, bitcmp, bitshift, intmax, flintmax.

Побитовая операция "не" — это унарная операция, которая выполняет логическое отрицание каждого бита значения. Для этого необходимо определить маску, относительно которой происходит отрицание. Побитовая операция "не" в Octave — bitcmp.

: bitcmp (A, k) ¶

Возвращает дополнение по модулю 2 к 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 также позволяет выполнять побитовые сдвиги влево и вправо.

: bitshift (a, k) ¶
: 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–2022 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/v7.2.0/Bit-Manipulations.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API