2017-03-25 3 views
0

条件演算子は変数でオーバーフローします。 "if ... else ..."にすると、すべてがうまくいきます。なぜですか?ばかばかしい...結果は次のようにコードが行く、valueResult2 = 24、 valueResult1 = 255 次のとおりです。C#の条件演算子については、変数がオーバーフローします

int valueInput1 =280; 
byte valueResult1 =0; 
if (valueInput1 > 255) 
{ 
    valueResult1 = 255; 
} 
else if (valueInput1 < 0) 
{ 
    valueResult1 = 0; 
} 
else 
{ 
    valueResult1 = (byte)valueInput; 
} 

int valueInput2 =280; 
byte valueResult2 =0; 
valueResult2 = (byte) ((valueInput2 > 255) ? 255 : (byte)valueInput2); 
valueResult2 = (byte)((valueInput2 < 0) ? 0 : (byte)valueInput2); 
+0

何を期待されていませんか? int> 255を1バイトに強制しています! –

+0

なぜ 'int'を' byte'にキャストしているのか不思議です。バイトは255を超えてはいけません。 – STLDeveloper

+0

出力変数はバイトでなければなりません。 – wujian

答えて

0

あなたのコードがbyteにそれらをキャストして整数値を切り捨てています。

はこれを試してみてください...その後

int valueInput2 =280; 
int valueResult2 =0; 
valueResult2 = valueInput2 > 255 ? 255 : valueInput2; 
valueResult2 = valueInput2 < 0 ? 0 : valueInput2; 
+0

ありがとうございます、私はvalueResult2の型をintに変更し、あなたのコードを試しました。結果はvalueResult2 = 280 ..... – wujian

+0

あなたのコードを試してみてください。結果は280です。 – wujian

+0

いいえ。最初の行では、 'valueInput2'が255より大きいかどうかテストします。値は280なので255より大きいので、' valueResult2'の値を255に設定します。 'valueInput2'が0より小さいかどうかをテストします.255なので、それは0より小さくないので、' valueInput2'(まだ280です)を 'valueResult2'に割り当てます。だから、最後には、 'valueInput2'と' valueResult2'の両方に280という値があります。プログラムされている方法とまったく同じです。 – STLDeveloper