シフト
ほとんどのマイクロプロセッサとデジタル信号プロセッサは、正しく定義された "ビットシフト" (略して "シフト") 整数演算をサポートしています。たとえば、8 ビットの符号なしの整数 00110101 を考えてみましょう。次の表に、2 ビット左シフトと 2 ビット右シフトの結果を示します。
シフト演算 | バイナリ値 | 10 進数 |
---|---|---|
シフトなし (元の番号) | 00110101 | 53 |
2 ビット左シフト | 11010100 | 212 |
2 ビット右シフト | 00001101 | 13 |
Simulink® Shift Arithmetic ブロックを使用してシフトを実行できます。ビット シフト、2 進小数点シフトまたはその両方を実行するには、このブロックを使用します。
ビット右シフト
右方向へシフトする特殊なケースでは、符号情報を含んでいる可能性のある左端ビットの処理を考慮する必要があります。右方向へのシフトは「"論理" 右シフト」または「"算術" 右シフト」として分類できます。論理右シフトの場合は、ビット シフトごとに最下位ビットに 0 が組み込まれます。算術右シフトの場合は、ビット シフトごとに最下位ビットが再循環します。
Shift Arithmetic ブロックは算術右シフトを実行するので、右ビット シフトごとに最下位ビットを再循環します。たとえば、下のモデルに示すように、固定小数点数が 11001.011 (-6.625) の場合、2 進小数点不動のまま 2 桁右へビット シフトした結果は 11110.010 (-1.75) となります。
Shift Arithmetic ブロックを使用して符号付き数値に論理右シフトを実行するには、次のモデルで示すように、Data Type Conversion ブロックを使用して、この数を同じ長さとスケーリングの符号なし数値としてキャストします。このモデルは、符号付き固定小数点数 11001.001 (-6.625) が 00110.010 (6.25) になることを示しています。