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

wan*_*ear 3 matlab

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

y = double(128);
bitsra(y,3)
Run Code Online (Sandbox Code Playgroud)

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

Chr*_*ris 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
Run Code Online (Sandbox Code Playgroud)

在MATLAB 2009a上:

>> bitshift(128, -3)

ans =

    16
Run Code Online (Sandbox Code Playgroud)

编辑: bitshift适用于任何定点数据类型,尽管通过调用生成的错误消息bitshift(128.5, -3)表明它需要整数值.因此bitshift(128.5, -3),例如,由于128.5默认情况下是浮点双精度变量,因此无法工作.从bitshift您的文档中可以使用fi浮点工具箱中的函数来创建定点数.因此,为了处理分数,可以做类似的事情

>> bitshift(fi(128.5), -3)

ans =

    16.025
Run Code Online (Sandbox Code Playgroud)