我正在尝试对 MATLAB 2010b 中的双精度值执行位移右操作。似乎在较新的 MATLAB 版本中,这可以使用bitsra()来完成,例如:
y = double(128);
bitsra(y,3)
但此功能在旧版本中不可用。实现这一目标的最佳方法是什么?
您可以使用该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