在MATLAB R2010b中移位一个双精度值

时间:2012-05-21 08:19:17

标签: matlab

我正在尝试在MATLAB 2010b中对double值执行右移位操作。似乎在较新的MATLAB版本中,可以使用bitsra()来完成,例如:

y = double(128);
bitsra(y,3)

但此功能在旧版本中不可用。 实现这一目标的最佳方法是什么?

1 个答案:

答案 0 :(得分:6)

您可以使用bitshift函数,该函数至少可以从MATLAB 2009a获得。从文档

  

c = bitshift(a, k)返回移位a位的k值。

     
      
  • k为正时,0值位在右侧移入。

  •   
  • k为负数且a为无符号时,或者有符号且正数的0值位在左侧移入。

  •   
  • k为负且a为带符号且为负数时,1值位会在左侧移入。

  •   

在MATLAB 2012b上

>> bitsra(128, 3)

ans =

    16

在MATLAB 2009a上:

>> bitshift(128, -3)

ans =

    16

修改 bitshift适用于任何定点数据类型,但通过调用bitshift(128.5, -3)生成的错误消息表明它需要整数值。因此,bitshift(128.5, -3)不起作用,因为128.5默认情况下是浮点双精度变量。从bitshift的文档中,您可以使用浮点工具箱中的fi函数来创建定点数。因此,要处理分数,可以执行类似

的操作
>> bitshift(fi(128.5), -3)

ans =

    16.025