Main Content

bitshift

将位移动指定位数

说明

示例

c = bitshift(a,k) 返回移动 k 位的 fi 对象 a 的值。

移位是算术移位,其行为类似于 b = a.*2^k,将 b 的值转换为输入 a 的类型。b 的转换可能涉及溢出或精度损失。

遵循 aOverflowAction 属性,但 RoundingMethod 始终为 Floor。如果遵循 aRoundingMethod 属性很重要,请尝试使用 pow2 函数。

a 的溢出操作为 Saturate 时,始终保留符号位。当 a 的溢出操作为 Wrapk 为负值时,保留符号位。当 a 的溢出操作为 Wrapk 为正值时,符号位可能会更改。

  • k 为正值时,0 值位向右移位。

  • k 为负值且 a 为无符号值时,或为有符号的正值 fi 对象时,0 值位向左移位。

  • k 为负值并且 a 为有符号的负值 fi 对象时,1 值位向左移位。

示例

全部折叠

此示例突出显示更改 fimath 对象的 OverflowAction 属性会如何更改 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 对象 ca 具有相同的 numerictype

扩展功能

C/C++ 代码生成
使用 MATLAB® Coder™ 生成 C 代码和 C++ 代码。

版本历史记录

在 R2006a 之前推出

另请参阅

| | | | | | | | |