bitshift

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

Синтаксис

Описание

пример

c = bitshift(a,k) возвращает значение fi объект a переключенный k биты.

Сдвиг является арифметикой и ведет себя как b = a.*2^k со значением b бросьте к типу входа a. Бросок b может включить переполнение или потерю точности.

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

Когда действие переполнения a Saturate, знаковый бит всегда сохраняется. Когда действие переполнения a Wrap и k отрицательно, знаковый бит сохраняется. Когда действие переполнения a 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

Входные параметры

свернуть все

Введите fi объект в виде скаляра или вектора. a может быть любая фиксированная точка числовой тип.

Типы данных: fi

Количество битов, чтобы переключить в виде скаляра.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Выходные аргументы

свернуть все

Результат сдвига a k биты, возвращенные как fi объект. Выход fi объект c имеет то же самое numerictype как a.

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

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

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

| | | | | | | | |

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