2015-11-25 16 views
5

7.8.3。剰余演算子についてC#仕様のそれは次のように述べている:int.MinValue%-1が原因でオーバーフロー例外が発生する理由

左のオペランドが最小のintまたはlong値であり、右 オペランドがSystem.OverflowExceptionがスローされ、-1の場合。

したがって、int.MinValue % -1はオーバーフロー例外になります。なぜ私は理解しようとしていますか?

+0

Javaでは、結果は仕様によって「0」であり、Cでは操作が未定義の動作を呼び出すことに注意してください。 – ouah

答えて

6

2の補数演算では、データ型の範囲は(-2 ** n)から(2 ** n - 1)(nはデータ型のビット数より1少ない)です。

たとえば、16ビット符号付き整数の有効範囲は、-32768(-2 ** 15)〜32767(2 ** 15-1)です。

-32768/-1 = +32768これは、16ビット符号付き整数の有効範囲を超えています。

+2

数学的に 'int.MinValue%-1'は0または-1(または可能な1)です。これは16ビット符号付き整数の有効範囲を超えません。 – chux

+2

しかし、それは最初に分割して残りを見つけることによって計算されます。 – keithmo

+0

同意しますが、言語仕様でその注文が必要ですか? – chux

関連する問題