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
int6463uint6464
десятичное число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)

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

b = [1 3 8 11 15];
x = sum(int16(2).^(b-1))
B = bitget(x, 1:15)
find(B)
typeof(B)
--> b = [1 3 8 11 15];
--> x = sum(int16(2).^(b-1))
 x  =
  17541

--> B = bitget(x, 1:15)
 B  =
  1  0  1  0  0  0  0  1  0  0  1  0  0  0  1

--> find(B)
 ans  =
   1.   3.   8.   11.   15.

--> typeof(B)
 ans  =
  "int16"

С целыми числами типа uint64 больше 252:

b = [1 12 23 34 45 53 64];
x = sum(uint64(2).^(b-1))
B = bitget(x, 1:64)
find(B)
typeof(B)
--> b = [1 12 23 34 45 53 64];
--> x = sum(uint64(2).^(b-1))
 x  =
  9227893237262321665

--> B = bitget(x, 1:64)
 B  =
         column 1 to 32
 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0

         column 33 to 64
 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1

--> find(B)
 ans  =
   1.   12.   23.   34.   45.   53.   64.

--> typeof(B)
 ans  =
  "uint64"

С большими десятичными целыми числами больше 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

История

ВерсияОписание
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 Jul 20 11:21:22 CEST 2021