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