C & C++ FAQ
目次
C
C++
>>演算子による右シフトが期待通りに動作しないのですが。
>>
演算子は左オペランドの値を、右オペランドの値のビット数だけ右にシフトを行った値を生成します。たとえば、
100 >> 2
は、100を2ビット右にシフトした値となります。
整数値を1ビット右にシフトすると、値は2分の1となりますので、nビット右にシフトすると、2
n
で割った値となります。ただし
>>
演算子が、そのような動作をするのは、符号無し整数型の値あるいは、符号付き整数型の非負値にのみ有効であり、
符号付き整数型の負値に対して適用した結果は、処理系に依存します(処理系定義です)
。
■ 根拠 ■
標準C
§6.3.7
Bitwise shift operators
標準C
99
§6.5.7
Bitwise shift operators
標準C++
§5.8
Shift operators
戻る