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