2016-07-25 2 views
0

바이트를 255보다 큰 int 형으로 캐스팅하는 데 문제가 있습니다. 문제는 동일한 코드를 실행하는 두 개의 프로그램이 있다는 것입니다. 하나는 예외가 있고 다른 하나는 그렇지 않습니다. 심지어 컴파일 설정이 같아도 마찬가지입니다. 코드이있다 : "산술 운전 성이 오버 플로우를 유발"라고 말하는하는 "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; 
    } 

예외가 발생 된 라인이있다.

동일한 컴퓨터에서 동일한 코드를 사용하는 두 개의 서로 다른 프로젝트에서는 일반적으로 생각하지 않습니다.

+0

당신은 산술이 켜져 확인해야합니까? –

답변

1

당신은 checkedunchecked 키워드 정수 오버 플로우를 제어 할 수 있습니다

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

그리고

// Do not throw exception 
    unchecked { 
    output[i] = (byte)(xorValue); 
    } 
관련 문제