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 uint64 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)
С кодированными целыми числами:
--> 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)) 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 |
|
Report an issue | ||
<< bitcmp | Побитовые операции | bitor >> |