3

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