bitget Извлекает из целых чисел биты по указанным индексам

## Синтаксис

                y = bitget(x, pos)

## Аргументы

x

  Скаляр, вектор, матрица или гиперматрица положительных десятичных или кодированных целых чисел.

pos

  Скаляр, вектор, матрица или гиперматрица десятичных или кодированных целых чисел в `[1, bitmax]`, где `bitmax` - это максимальный индекс битов для типа переменной `x`: индексы битов, которые следует извлечь. Бит №1 - это наименьший бит (20).

  typeof(x) | bitmax | .. | typeof(x) | bitmax
  int8 | 7 |  | uint8 | 8
  int16 | 15 |  | uint16 | 16
  int32 | 31 |  | uint32 | 32
  int64 | 63 |  | uint16 | 64
  десятичное число | 1024 |  |  |

y

  Скаляр, вектор, матрица или гиперматрица из 0 и 1 типа переменной `x`. Размеры и содержимое `y` следующие:

  - Если `x` скаляр:

    - `y` имеет размеры `pos`
    - `y(i,j,..)` - это значение бита №`pos(i,j,..)` переменной `x`.

  - Если `pos` скаляр:

    - `y` имеет размеры `x`
    - `y(i,j,..)` - это значение бита №`pos` в `x(i,j,..)`.

  - Если `x` и `pos` являются массивами одинаковых размеров, то обработка идёт поэлементно:

    - `y` имеет размеры `x` и `pos`
    - `y(i,j,..)` - это значение бита №`pos(i,j,..)` в `x(i,j,..)`.

  - В противном случае:

    - `y` - это матрица, у которой `length(x)` строк и `length(pos)` столбцов.
    - `y(i,j)` - это значение бита №`pos(j)` в `x(i)`.

## Описание

`bitget()` сканирует выбранные биты двоичного представления неких положительных целых чисел `x`. Эта функция возвращает 0 для снятых битов и 1 для взведённых битов.

Результат имеет размеры `x` или `pos` или обеих входных переменных.

Однако, если и `x` и `pos` являются нескалярами и имеют несовпадающие размеры, то результат `y` является матрицей, игнорирующей размеры `x`. Тогда, после изменения размеров `y` с помощью `y = matrix(y, [size(x) -1])`, значение бита №b в `x(i,..,k)` будет находиться в `y(i,..,k,b)`.

## Примеры

    // 19 это (10011)_2
    // Второй бит равен1 (начиная с конца).
    x=uint8(19);
    pos=2;
    y = bitget(x,pos)
    expected = 1;
    // 13 это (1101)_2
    dec2bin(13)
    bitget(uint8(13),4:-1:1)

С массивами и кодированными целыми числами::

С большими десятичными целыми числами > 252:

    x = sum(2 .^([7 16 18 19 25 52 70]-1))
    bitget(x,    [7 16 18 19 35 52 70 80])

    --> x = sum(2 .^([7 16 18 19 25 52 70]-1))
     x  =
       5.903D+20

    --> bitget(x,    [7 16 18 19 35 52 70 80])
     ans  =
       Nan   Nan   1.   1.   0.   1.   1.   0.

x и pos являются массивами несовпадающих размеров:

    x = [ 39  6   62
          8   14  29
          4   64  12
          44  39  50
          52  12  39
          5   4   29 ];
    x = sum(2.^(x-1),2);
    bitget(x, [5 8 12 39])

    --> bitget(x, [5 8 12 39])
     ans  =
       Nan   Nan   0.   1.
       0.    1.    0.   0.
       Nan   Nan   1.   0.
       0.    0.    0.   1.
       0.    0.    1.   1.
       1.    0.    0.   0.

## Смотрите также

- bitstring
- dec2bin
- bitset
- bitand
- &

## История

6.1

- Теперь принимаются положительные беззнаковые целые числа.
- Теперь принимаются 64-битные кодированные целые числа.
- Теперь для десятичных целых чисел можно получать биты с индексами в диапазоне [53, 1024].
- Для десятичных целых чисел > 252 опрос битов менее относительной точности `%eps` теперь возвращает `NaN` вместо 0.
- Теперь можно получить несколько битов от каждого элемента входного массива.