C# Language
オーバーフロー
サーチ…
整数オーバーフロー
整数に格納できる最大容量があります。そしてその限界を越えると、それは負の側にループバックします。 int
場合は2147483647
int x = int.MaxValue; //MaxValue is 2147483647
x = unchecked(x + 1); //make operation explicitly unchecked so that the example also works when the check for arithmetic overflow/underflow is enabled in the project settings
Console.WriteLine(x); //Will print -2147483648
Console.WriteLine(int.MinValue); //Same as Min value
この範囲外の整数の場合、データ型BigIntegerを持つ名前空間System.Numericsを使用します。詳細については、以下のリンクを参照してください。https://msdn.microsoft.com/en-us/library/system.numerics.biginteger(v=vs.110).aspx
操作中のオーバーフロー
操作中にオーバーフローも発生します。次の例では、xはint
、1はデフォルトでint
です。したがって、加算はint
加算です。結果はint
ます。それはオーバーフローします。
int x = int.MaxValue; //MaxValue is 2147483647
long y = x + 1; //It will be overflown
Console.WriteLine(y); //Will print -2147483648
Console.WriteLine(int.MinValue); //Same as Min value
1Lを使用することでそれを防ぐことができます。今は1がlong
なり、 long
追加されます
int x = int.MaxValue; //MaxValue is 2147483647
long y = x + 1L; //It will be OK
Console.WriteLine(y); //Will print 2147483648
注文事項
次のコードにオーバーフローがあります
int x = int.MaxValue;
Console.WriteLine(x + x + 1L); //prints -1
次のコードではオーバーフローはありません
int x = int.MaxValue;
Console.WriteLine(x + 1L + x); //prints 4294967295
これは、操作の左から右への順序付けによるものです。最初のコードでは、 x + x
オーバーフローが発生し、その後はlong
ます。一方、 x + 1L
はlong
なり、その後x
がこの値に加算されます。
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow