Scilab Home page | Wiki | Bug tracker | Forge | Mailing list archives | ATOMS | File exchange
Please login or create an account
Change language to: English - Français - Português - 日本語 -
Справка Scilab >> Основные функции > Побитовые операции > bitget

bitget

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

Синтаксис

y = bitget(x, pos)

Аргументы

x

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

pos

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

typeof(x)bitmax..typeof(x)bitmax
int87 uint88
int1615uint1616
int3231uint3232
int6463uint1664
десятичное число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 — bitwise logical AND between element-wise integers of 2 arrays
  • & — Binary AND between integers. Logical AND over/between booleans and numbers

История

VersionDescription
6.1
  • Теперь принимаются положительные беззнаковые целые числа.
  • Теперь принимаются 64-битные кодированные целые числа.
  • Теперь для десятичных целых чисел можно получать биты с индексами в диапазоне [53, 1024].
  • Для десятичных целых чисел > 252 опрос битов менее относительной точности %eps теперь возвращает NaN вместо 0.
  • Теперь можно получить несколько битов от каждого элемента входного массива.
Scilab Enterprises
Copyright (c) 2011-2017 (Scilab Enterprises)
Copyright (c) 1989-2012 (INRIA)
Copyright (c) 1989-2007 (ENPC)
with contributors
Last updated:
Tue Feb 25 08:54:54 CET 2020