2016-07-25 13 views
0

バイトに255より大きい整数をキャストする際に問題が発生しました。問題は、同じコードを実行する2つのプログラムがあることです。 1つは例外があり、もう1つはコンパイルの設定が同じであっても私はそうではありません。 コードは以下です:「算術opeationがオーバーフローを起こした」と言って、「System.OverflowException」でxoring後にintをバイトにキャストする

output[i] = (byte)(xorValue); 

private static byte[] MixRound(byte[] input, Random RNG, int seed) 
    { 
     bool[] cellMap = new bool[input.Length]; 
     byte[] output = new byte[input.Length]; 
     for (int i = 0; i < input.Length; i++) 
     { 
      int value = input[NewLocation(cellMap, RNG)]; 
      int xor = seed * (i + seed); 
      int xorValue = value^xor; 
      output[i] = (byte)(xorValue); 
     } 
     return output; 
    } 

例外がスローされた線が、このあります。

同じコンピュータ上に同じコードを持つ2つの異なるプロジェクトでは普通だとは思いません。

+0

あなたは算術がオンになって確認されていますか? –

答えて

1

あなたはcheckeduncheckedキーワードで整数オーバーフローを制御することができます。

// Throw exception 
    checked { 
    output[i] = (byte)(xorValue); 
    } 

そして

// Do not throw exception 
    unchecked { 
    output[i] = (byte)(xorValue); 
    } 
関連する問題