bitshift

Переключите конкретное количество битов мест

Синтаксис

c = bitshift(a, k)

Описание

c = bitshift(a, k) возвращает значение a переключенный k биты. Вход fi объект a может быть скалярное значение или вектор и может быть любая фиксированная точка числовой тип. Выход fi объект c имеет тот же числовой тип как aK должно быть скалярное значение и MATLAB® встроенный числовой тип.

OverflowAction свойство a выполнен, но RoundingMethod всегда Floor. При повиновении RoundingMethod свойство a важно, попытайтесь использовать pow2 функция.

Когда действием переполнения является Saturate знаковый бит всегда сохраняется. Знаковый бит также сохраняется, когда действием переполнения является Wrap, и k отрицательно. Когда действием переполнения является Wrap и k положительно, знаковый бит не сохраняется.

  • Когда k положительно, 0-значные биты смещены в справа.

  • Когда k отрицательно, и a без знака, или и положительный fi со знаком объект, 0-значные биты смещены в слева.

  • Когда k отрицательно и a и отрицательный fi со знаком объект, 1-значные биты смещены в слева.

Примеры

Этот пример подсвечивает как изменение OverflowAction свойство fimath объект может изменить результаты, возвращенные bitshift функция. Считайте следующую фиксированную точку со знаком fi объект со значением 3, размер слова 16, и дробная длина 0:

a = fi(3,1,16,0);
По умолчанию, OverflowAction fimath свойством является Saturate. Когда a смещен таким образом, что это переполняется, это насыщается к максимальному возможному значению:
for k=0:16,b=bitshift(a,k);...
disp([num2str(k,'%02d'),'. ',bin(b)]);end

00. 0000000000000011
01. 0000000000000110
02. 0000000000001100
03. 0000000000011000
04. 0000000000110000
05. 0000000001100000
06. 0000000011000000
07. 0000000110000000
08. 0000001100000000
09. 0000011000000000
10. 0000110000000000
11. 0001100000000000
12. 0011000000000000
13. 0110000000000000
14. 0111111111111111
15. 0111111111111111
16. 0111111111111111
Теперь измените OverflowAction к Wrap. В этом случае старшие значащие биты откладывают “верхнюю часть” a пока значение не является нулем:
a = fi(3,1,16,0,'OverflowAction','Wrap');
for k=0:16,b=bitshift(a,k);...
disp([num2str(k,'%02d'),'. ',bin(b)]);end

00. 0000000000000011
01. 0000000000000110
02. 0000000000001100
03. 0000000000011000
04. 0000000000110000
05. 0000000001100000
06. 0000000011000000
07. 0000000110000000
08. 0000001100000000
09. 0000011000000000
10. 0000110000000000
11. 0001100000000000
12. 0011000000000000
13. 0110000000000000
14. 1100000000000000
15. 1000000000000000
16. 0000000000000000

Расширенные возможности

Генерация кода C/C++
Генерация кода C и C++ с помощью MATLAB® Coder™.

Смотрите также

| | | | | | | | |

Представлено до R2006a