-2
は私が何を意味、私は2つの変数の加算によってオーバーフローが発生するかどうかを確認できますか?
byte b1 = 255,
b2 = 1;
Console.WriteLine("Does {0} + {1} oveflow? {2}", b1, b2, Overflows(b1,b2) ? "Yes : "No"); // Answer should be "Yes" here
のように使用することができ、一般的な手順
public bool Overflows<T> (T a, T b)
{
// returns true or false based on whether
// a + b overflows
}
を構築することができ???
byte
の場合は、(a+b) < a
と(a+b) < b
のいずれかを見ることができます。例えば255
と1
より小さい場合、結果は0
となるため、255+1
がオーバーフローすることがわかります。それとも、私はより大きなデータ型にそれらをキャストし
return ((int)a + (int)b) > (int)Byte.MaxValue;
のようにチェックしますが、それは+
オペレータを持っているすべての数値タイプでは動作しませんすることができます。
public bool Overflows<T> (T a, T b)
{
{
// the 'checked' keyword ensures an OverflowException is thrown
// as a result of a real integer overflow happening
c = checked(a + b); // * with 'T' this won't compile, see below
return false;
}
catch (System.OverflowException e)
{
return true;
}
}
しかし、ジェネリック型パラメータT
のために、コンパイラは+
演算子を理解していない: -