[Bitwise Operators]
説明
右シフト演算子 >> は、左オペランドのビットを右オペランドで指定された位置の数だけ 右 にシフトします。
構文
variable >> number_of_bits;
媒介変数
variable: 許可されるデータ型: byte, int, long.number_of_bits: 32 以下の数値。許可されるデータ型: int.
例
x を y ビット右にシフト (x >> y) し、x の最上位ビットが 1 の場合、動作は x の正確なデータ型によって異なります。x が int 型の場合、最上位ビットは符号ビットであり、前述のように x が負かどうかを決定します。その場合、符号ビットは下位ビットにコピーされますが、これは歴史的な理由により、以下のようになります。
int x = -16; // binary: 1111111111110000 int y = 3; int result = x >> y; // binary: 1111111111111110
この動作は符号拡張と呼ばれ、多くの場合、望ましい動作ではありません。代わりに、左からゼロをシフトインしたい場合もあるでしょう。unsigned int 式では右シフトの規則が異なるため、型キャストを使用することで、左からゼロがコピーされるのを抑制することができます。
int x = -16; // binary: 1111111111110000 int y = 3; int result = (unsigned int)x >> y; // binary: 0001111111111110
符号拡張を避けるように注意すれば、右シフト演算子 >> を使用して 2 の累乗で割ることができます。次に例を示します。
int x = 1000; int y = x >> 3; // integer division of 1000 by 8, causing y = 125.
参照
- [Example] BitMath Tutorial
Language Reference Home
86Duinoリファレンスのテキストは、Arduinoリファレンスを改変したもので、Creative Commons Attribution-ShareAlike 3.0ライセンスに基づいてライセンスされています。リファレンス内のコードサンプルはパブリックドメインとして公開されています。