Извлекает из целых чисел биты по указанным индексам
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 имеет размеры posy(i,j,..) - это значение бита
№pos(i,j,..) переменной x.Если pos скаляр:
y имеет размеры xy(i,j,..) - это значение бита
№pos в x(i,j,..).Если x и pos
являются массивами одинаковых размеров,
то обработка идёт поэлементно:
y имеет размеры x
и posy(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 |
|