Извлекает из целых чисел биты по указанным индексам
y = bitget(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 |
Скаляр, вектор, матрица или гиперматрица из 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.
Version | Description |
6.1 |
|