Main Content

bitshift

指定したビット数のシフト

説明

c = bitshift(a,k) は、k ビット分シフトされた fi オブジェクト a の値を返します。

シフトは b = a.*2^k のように動作する算術シフトで、b の値が入力 a の型にキャストされます。b のキャストにより、オーバーフローや精度の低下が発生する可能性があります。

aOverflowAction プロパティは維持されますが、RoundingMethod は必ず Floor です。aRoundingMethod プロパティの維持が重要である場合は、関数 pow2 を使用してください。

a のオーバーフロー アクションが Saturate である場合、符号ビットは常に保持されます。a のオーバーフロー アクションが Wrap である場合、k が負であれば符号ビットが保持されます。a のオーバーフロー アクションが Wrapk が正である場合は、符号ビットが変わる可能性があります。

  • k が正である場合、値が 0 のビットは右側にシフトします。

  • k が負、a が符号なしまたは符号付きの正の fi オブジェクトである場合、値が 0 のビットは左側にシフトします。

  • k が負、a が符号付きおよび負の fi オブジェクトである場合、値が 1 のビットは左側にシフトします。

すべて折りたたむ

以下の例では、fimath オブジェクトの OverflowAction プロパティの変更が、関数 bitshift によって返される結果を変更する方法を説明します。符号付き固定小数点 fi オブジェクトの値は 3、語長は 16、小数部の長さは 0 であるとします。

a = fi(3,1,16,0);

既定では、OverflowAction fimath プロパティは Saturate です。a がシフトされてオーバーフローが発生した場合、可能な最大値に飽和されます。

for k=0:16
    b=bitshift(a,k);
    disp([num2str(k,'%02d'),'. ',bin(b)]);
end
00. 0000000000000011
01. 0000000000000110
02. 0000000000001100
03. 0000000000011000
04. 0000000000110000
05. 0000000001100000
06. 0000000011000000
07. 0000000110000000
08. 0000001100000000
09. 0000011000000000
10. 0000110000000000
11. 0001100000000000
12. 0011000000000000
13. 0110000000000000
14. 0111111111111111
15. 0111111111111111
16. 0111111111111111

ここで、OverflowActionWrap に変更します。この場合、値が 0 になるまで、最上位ビットが a の "上位" にシフトします。

a = fi(3,1,16,0,'OverflowAction','Wrap');
for k=0:16
    b=bitshift(a,k);
    disp([num2str(k,'%02d'),'. ',bin(b)]);
end
00. 0000000000000011
01. 0000000000000110
02. 0000000000001100
03. 0000000000011000
04. 0000000000110000
05. 0000000001100000
06. 0000000011000000
07. 0000000110000000
08. 0000001100000000
09. 0000011000000000
10. 0000110000000000
11. 0001100000000000
12. 0011000000000000
13. 0110000000000000
14. 1100000000000000
15. 1000000000000000
16. 0000000000000000

入力引数

すべて折りたたむ

入力 fi オブジェクト。スカラーまたはベクトルとして指定します。a には任意の固定小数点数値型を指定できます。

データ型: fi

シフトするビット数。スカラーとして指定します。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

出力引数

すべて折りたたむ

ak ビット分シフトした結果。fi オブジェクトとして返されます。出力 fi オブジェクト ca と同じ numerictype をもちます。

拡張機能

C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。

バージョン履歴

R2006a より前に導入