Переключите конкретное количество битов мест
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