seclan のほえほえルーム

| |

・プログラミング言語 C の新機能 Part XVI: INT#3:整数除算 (1999/06/07 [])
 整数の除算に何か問題があるの?そう思う人も多いでしょう。しかし現在の C 言語では、整数の除算に関しては移植性がありません。どういう場合に移植性がないのかといえば、整数を割るときのどちらかのオペランドが負であった場合です。
 現在の C 言語の規格では両方のオペランドが正の数の場合、商は小数点以下を捨てた数になることになっています。例えば、1/2の場合、正しい値は、0.5 ですが、小数点以下を捨てるので商は 0、あまりは 1になります。余りは、(a/b)*b + a%b == a を満たす値となります。
 しかし、どちらか一方の数が負の場合、その結果は実装依存になっています。例えば、-1/2 の正しい結果は、-0.5 ですが、環境によって商0あまり-1になったり、商-1あまり1になったりします。
 今回の新しい C 言語では、割り算の結果はすべて 0 方向に切り捨てることになりました。例えば、-1/2 では結果が、-0.5 ですが、0 方向に切り捨てるので、商は 0 になります。すると余りは、-1 ということになります。これがすべての環境で保証されることになりました。


by seclan


| |

 

配信

6.33 msec