>>

名称

>>

説明

ビット単位の右シフト演算子(»)は、左辺のオペランドを、右辺のオペランドで指定した数だけ、右シフトさせる。

書式

variable >> number_of_bits;

引数

varable整数(利用できるデータ型:byte, int, long)。
number_of_bits32以下の整数(利用できるデータ型:int)。

使用例

1
2
int a = 40;     // binary: 0000000000101000
int b = a >> 3; // binary: 0000000000000101, or 5 in decimal

注意

xをyビット分右シフトするとき(x » y)、xの最上位ビットが1であれば、その振る舞いはxのデータ型に依存する。xがint型のとき、最上位ビットは符号ビットであり、xが負の値かそうでないかを決めると先に説明した。この場合は、歴史的な理由により、符号ビットが右ビットにコピーされる。

1
2
3
int x = -16;  // binary: 1111111111110000
int y = 3;
int result = x >> y;  // binary: 1111111111111110

符号拡張と呼ばれるこの振る舞いは、望まない振舞いであることも多い。そうではなく、0が左からシフトしてほしいこともあるだろう。unsigned int型の式に対する右シフトの振舞いは異なるので、キャスト演算を使うことで1がコピーされるのを防ぐことができる。

1
2
3
int x = -16;  // binary: 1111111111110000
int y = 3;
int result = (unsigned int)x >> y;  // binary: 0001111111111110

注意深く符号拡張を避けることができるのであれば、ビット単位の右シフト演算子は2のべき乗で割るときに利用できる。

1
2
int x = 1000;
int y = x >> 3; // integer division of 1000 by 8, causing y = 125.

参照

利用例 Bitmath Tutorial

オリジナルのページ

https://www.arduino.cc/reference/en/language/structure/bitwise-operators/bitshiftright/

Last Revision: 2019/02/19

最終更新日

January 4, 2024

inserted by FC2 system