Byte + Byteのときにintが生成されることに気づきました オーバーフローした場合、バイトをa + byte bにして255を生成することは可能ですか?C#バイト加算オーバーフロー?
Byte a=200;
Byte b=200
Byte output = (a+b); // now output equals 144, I want 255
Byte + Byteのときにintが生成されることに気づきました オーバーフローした場合、バイトをa + byte bにして255を生成することは可能ですか?C#バイト加算オーバーフロー?
Byte a=200;
Byte b=200
Byte output = (a+b); // now output equals 144, I want 255
この(未テスト)はどうですか? checked
statementに番号がオーバーフローしていないとき
byte output = (byte)(Math.Min(a + b, Byte.MaxValue));
おそらく 'byte.MaxValue'はマジック定数' 255'より少し読みやすくなります –
ありがとう! – ywj7931
これは、OverflowExceptionがスローされます。
Byte output;
try
{
checked
{
Byte a=200;
Byte b=200
output = (a+b);
}
}
catch(OverflowException e)
{
output = Byte.MaxValue;
}
Console.WriteLine(output);
しかし、私はあなたの流れを自分でコントロールすることをお勧め:
checked
{
Byte a=200;
Byte b=200
Byte output = (a+b);
}
そして、あなたはそれをキャッチして処理することができますこの方法で。例外をキャッチするのは悪いアプローチですが、複雑な計算をすると面倒です。代わりに数学を使用してください:
var output = (Byte)Math.Min((int)a+b, Byte.MaxValue);
これは通常起こります。
byte output = (int)a + (int)b > byte.MaxValue ? byte.MaxValue : a + b;
は、私は考えることができる他のオプションは、独自のデータ型を作成するには、次のようになります。あなたはそれが、その後255を生成したい場合は
私は考えることができる最も簡単なオプションは、三項演算を使用することですあなたのためにこれを処理する。 a + b
以来
は、あなたが簡単に確認することができint
型のものである:あなたはそれは良い考えであることを確認してください
Byte a = 200;
Byte b = 200
byte result = a + b > byte.MaxValue ? byte.MaxValue : (byte) (a + b);
偉大な心は似ていると思います。 :) –
ていますか?その背後にある要件は何ですか?ちょうど今見てください: 'output-a'は' b'ともう一度同じではありません! –