exp1 >> exp2
右シフト演算子が論理シフトとして実装されるか算術シフトとして実装されるかは処理系定義である。
/* (-16 >> 2) → -4 */ (11110000 >> 2) → 11111100 // 算術シフトの場合。
/* (-16 >> 2) → 60 */ (11110000 >> 2) → 00111100 // 論理シフトの場合。
シフト後に最上位ビットが 1 となるか 0 となるかといったことを気にする煩わしさから逃れるためには exp1 に符号無し整数型を使う。
符号無し整数型に対しては、算術シフトと論理シフトとの間に差異はない。
符号無し整数型を右シフトした後の最上位ビットは、常に 0 である。
関連
・printf, fprintf, sprintf 使用上の注意
・1行注釈(//)使用上の注意
・文字関数(isalnum, toupper など) 使用上の注意
・論理右シフト代入演算子(>>>=)使用上の注意 - Java
|