Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

bitshift

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

構文

c = bitshift(a, k)

説明

c = bitshift(a, k) は、k ビット分シフトされた a の値を返します。入力 fi オブジェクト a には、スカラー値またはベクトルを指定でき、固定小数点数値型も使用できます。出力 fi オブジェクト c は、a と同じ数値型をもちます。k は、スカラー値および MATLAB® 組み込み数値型でなければなりません。

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

オーバーフロー アクションが Saturate である場合、符号ビットは常に保持されます。オーバーフロー アクションが Wrapk が負である場合も、符号ビットは保持されます。オーバーフロー アクションが Wrapk が正である場合、符号ビットは保持されません。

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

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

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

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

a = fi(3,1,16,0);
既定の設定では、OverflowActionfimath プロパティは 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

拡張機能

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

R2006a より前に導入