2016-09-16 16 views
1

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 
+0

ていますか?その背後にある要件は何ですか?ちょうど今見てください: 'output-a'は' b'ともう一度同じではありません! –

答えて

6

この(未テスト)はどうですか? checked statementに番号がオーバーフローしていないとき

byte output = (byte)(Math.Min(a + b, Byte.MaxValue)); 
+0

おそらく 'byte.MaxValue'はマジック定数' 255'より少し読みやすくなります –

+0

ありがとう! – ywj7931

0

これは、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); 
1

これは通常起こります。

byte output = (int)a + (int)b > byte.MaxValue ? byte.MaxValue : a + b; 

は、私は考えることができる他のオプションは、独自のデータ型を作成するには、次のようになります。あなたはそれが、その後255を生成したい場合は

私は考えることができる最も簡単なオプションは、三項演算を使用することですあなたのためにこれを処理する。 a + b以来

1

は、あなたが簡単に確認することができint型のものである:あなたはそれは良い考えであることを確認してください

Byte a = 200; 
    Byte b = 200 

    byte result = a + b > byte.MaxValue ? byte.MaxValue : (byte) (a + b); 
+0

偉大な心は似ていると思います。 :) –

関連する問題