Spec-Zone.ru › Octave 6

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)

Возвращает 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)

Возвращает сдвиг a на k битов для 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/v6.4.0/Bit-Manipulations.html

Spec-Zone.ru

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