Main Content

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 ビットを挿入します。

  • kA が負の場合、MATLAB はビットを右にシフトし、左に |k| 個の 1 ビットを挿入します。

intout = bitshift(A,k,assumedtype) は、A のデータ型が assumedtype であると仮定します。

すべて折りたたむ

符号なし 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

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

入力引数

すべて折りたたむ

入力値。配列として指定します。Ak と同じサイズのスカラーまたは配列です。

  • A が double 配列で、assumedtype が指定されていない場合、MATLAB は A を符号なし 64 ビット整数として扱います。

  • assumedtype が指定されている場合、A のすべての要素は assumedtype の範囲内の整数値でなければなりません。

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

シフトするビット数。整数または整数配列として指定します。kA と同じサイズのスカラーまたは配列です。

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

想定される A のデータ型。'uint64''uint32''uint16''uint8''int64''int32''int16' または 'int8' のいずれかを指定します。

  • A が整数型配列の場合、assumedtype にはそれと同じ整数型を指定しなければなりません。

  • A が double 配列の場合、assumedtype には任意の有効な整数型を指定できます。

データ型: char | string

出力引数

すべて折りたたむ

シフト後の値。配列として返されます。intout のデータ型は A と同じです。

  • Ak がスカラーの場合は、intout もスカラーになります。

  • A または k が配列の場合、intout はその配列と同じサイズになります。

拡張機能

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

GPU コード生成
GPU Coder™ を使用して NVIDIA® GPU のための CUDA® コードを生成します。

バージョン履歴

R2006a より前に導入