bitshift

Заданное количество мест в битах сдвига

Синтаксис

c = bitshift(a, k)

Описание

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

The 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++ с помощью Coder™ MATLAB ®

.

См. также

| | | | | | | | |

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