bitshift
指定したビット数のシフト
説明
は、intout
= bitshift(A
,k
)A
の値を k
ビット左にシフトした値、つまり A に 2k
を乗算した値を返します。k
に負の値を指定した場合は、ビットを右にシフトする、つまり 2|k|
で除算した後で、負の方向で最も近い整数に丸められます。オーバーフローしたビットはすべて切り捨てられます。
A
が符号付き整数配列の場合、bitshift
は算術シフト結果を返します。このとき、k
が負の場合は符号付きビットを保持し、k
が正の場合は符号付きビットを保持しません。k
が正の場合、MATLAB® はビットを左にシフトし、右にk
個の 0 ビットを挿入します。k
が負で、A
が非負の場合、MATLAB はビットを右にシフトし、左に|
k
|
個の 0 ビットを挿入します。k
とA
が負の場合、MATLAB はビットを右にシフトし、左に|
k
|
個の 1 ビットを挿入します。
は、intout
= bitshift(A
,k
,assumedtype
)A
のデータ型が assumedtype
であると仮定します。
例
シフトされる 8 ビット整数
符号なし 8 ビット値のビットを、すべての非ゼロ ビットがオーバーフローするまで順次左にシフトします。
a = intmax('uint8'); s1 = 'Initial uint8 value %5d is %08s in binary\n'; s2 = 'Shifted uint8 value %5d is %08s in binary\n'; fprintf(s1,a,dec2bin(a))
Initial uint8 value 255 is 11111111 in binary
for i = 1:8 a = bitshift(a,1); fprintf(s2,a,dec2bin(a)) end
Shifted uint8 value 254 is 11111110 in binary Shifted uint8 value 252 is 11111100 in binary Shifted uint8 value 248 is 11111000 in binary Shifted uint8 value 240 is 11110000 in binary Shifted uint8 value 224 is 11100000 in binary Shifted uint8 value 192 is 11000000 in binary Shifted uint8 value 128 is 10000000 in binary Shifted uint8 value 0 is 00000000 in binary
整数の型による結果の違い
異なる整数型を想定した数値のシフトを求めます。
uintout = bitshift(6,5:7,'uint8')
uintout = 1×3
192 128 0
intout = bitshift(6,5:7,'int8')
intout = 1×3
-64 -128 0
32 ビット符号なし整数へのバイトの結合
bitor
および bitshift
を使用して 4 つの 8 ビット バイトを、それらで構成される 32 ビット整数ビット整数にパックします。
4 バイトのデータを作成します。-u32
接尾辞を使用して、データを uint32
として保存することを指定して、16 進数リテラルでデータを指定します。各バイトには 8 ビット相当のデータが含まれています。
byte4 = 0x87u32; byte3 = 0x65u32; byte2 = 0x43u32; byte1 = 0x21u32;
最初のバイトを 32 ビットの符号なし整数の最初の 8 ビットとして追加することから開始します。
packedNum = byte1;
次に、bitshift
を使用してバイトを適切な位置にシフトし、bitor
を使用してビットをコピーして、他の 3 つのバイトを packedNum
にパックます。
packedNum = bitor(packedNum,bitshift(byte2,8)); packedNum = bitor(packedNum,bitshift(byte3,8*2)); packedNum = bitor(packedNum,bitshift(byte4,8*3));
パックされた 32 ビット整数を表示します。
format hex
packedNum
packedNum = uint32
87654321
入力引数
A
— 入力値
配列
入力値。配列として指定します。A
は k
と同じサイズのスカラーまたは配列です。
A
が double 配列で、assumedtype
が指定されていない場合、MATLAB はA
を符号なし 64 ビット整数として扱います。assumedtype
が指定されている場合、A
のすべての要素はassumedtype
の範囲内の整数値でなければなりません。
データ型: double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
k
— シフトするビット数
整数 | 整数配列
シフトするビット数。整数または整数配列として指定します。k
は A
と同じサイズのスカラーまたは配列です。
データ型: double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
assumedtype
— 想定される A
のデータ型
'uint64'
| 'uint32'
| 'uint16'
| 'uint8'
| 'int64'
| 'int32'
| 'int16'
| 'int8'
想定される A
のデータ型。'uint64'
、'uint32'
、'uint16'
、'uint8'
、'int64'
、'int32'
、'int16'
または 'int8'
のいずれかを指定します。
A
が整数型配列の場合、assumedtype
にはそれと同じ整数型を指定しなければなりません。A
が double 配列の場合、assumedtype
には任意の有効な整数型を指定できます。
データ型: char
| string
出力引数
intout
— シフト後の値
配列
シフト後の値。配列として返されます。intout
のデータ型は A
と同じです。
A
とk
がスカラーの場合は、intout
もスカラーになります。A
またはk
が配列の場合、intout
はその配列と同じサイズになります。
拡張機能
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
GPU コード生成
GPU Coder™ を使用して NVIDIA® GPU のための CUDA® コードを生成します。
HDL コード生成
HDL Coder™ を使用して FPGA 設計および ASIC 設計のための Verilog および VHDL のコードを生成します。
HDL コードを効率的に生成するため、Fixed-Point Designer™ の関数 bitshift
の代わりに、関数 bitsll
、bitsrl
または bitsra
を使用します。
スレッドベースの環境
MATLAB® の backgroundPool
を使用してバックグラウンドでコードを実行するか、Parallel Computing Toolbox™ の ThreadPool
を使用してコードを高速化します。
この関数はスレッドベースの環境を完全にサポートしています。詳細については、スレッドベースの環境での MATLAB 関数の実行を参照してください。
GPU 配列
Parallel Computing Toolbox™ を使用してグラフィックス処理装置 (GPU) 上で実行することにより、コードを高速化します。
使用上の注意事項および制限事項:
A
またはk
の入力の少なくとも 1 つは整数配列でなければなりません。入力
A
を符号付き整数配列にはできません。64 ビット整数はサポートされません。
assumedtype
引数はサポートされていません。
詳細については、GPU での MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
バージョン履歴
R2006a より前に導入
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)