сдвиг разряда

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

Синтаксис

c = bitshift(a, k)

Описание

c = bitshift(a, k) возвращает значение a, переключенного битами k. Объект a входа fi может быть скалярным значением или вектором и может быть любой фиксированной точкой числовой тип. Объект c вывода fi имеет тот же числовой тип как a. k должен быть скалярным значением и 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