exponenta event banner

bitshift

Сдвинуть биты, указанное количество мест

Синтаксис

c = bitshift(a, k)

Описание

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