MATLAB 2010b で double 値に対してビット シフト右操作を実行しようとしています。新しい 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