3

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

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

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

4

1 回答 1

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
于 2012-05-21T08:36:04.717 回答