C言語の整数の除算についてメモ

  • C89では、負数の除算の丸め方向は処理系依存
  • C99では、負数の除算の丸め方向はゼロ方向への切り捨て。
    • 負方向への切り下げではないことに注意。
  • 符号つき整数のシフト演算(<<, >>)が算術シフトとなるか論理シフトとなるかは処理系依存
    • gccでもVC++でも、符号つきなら算術シフト、符号なしなら論理シフト。
  • 「nビットの算術シフト」と「2のn乗での除算」は等価ではない。
    • 前者は負方向への切り下げ、後者は(C99では)ゼロ方向への切り捨てとなる。