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имеет размеры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.
Смотрите также
- 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 >> |