前回の補足。
Java の整数は 2の補数表現をとっているが, int x = Integer.MIN_VALUE; のとき, x/(-1) は x に等しい。 いっぽう, x%(-1) は 0 になる。 いずれのばあいも例外は発生しない。
また, このとき x*(-1) も x に等しくなるので, x == (x/y)*y + (x%y) はこのときも成立する。
Ada では, 制約のない型(整数でいうと, Pascal でいう部分範囲型でないもの) に対する演算の結果がその型の範囲をこえたとき, 例外を発生するかどうかは実装に依存する。 GNAT では例外を発生しないようである。
C の規格では, このようなばあいは, 0 で割ったばあいとおなじく, 未定義になる。
C# の /, % 演算子は Java のばあいとまったくおなじ動作をする。
Fortran では整数に対する除算演算子 / は 0 にむかって切りすてる。 また, 組みこみ関数 MOD(x,y) は Modula-2 の REM とおなじである。 Fortran 90 以降はもうひとつ MODULO(x,y) という組みこみ関数が追加されたが, こちらは Ada の mod 演算子と(y が負のときをふくめて)おなじうごきをする。
投稿時刻 2005-03-11(甲午) 11:07 於 プログラミング | コメント (3)