2013-01-24 4 views
3

관리되는 C++ (CLI)에서 오버플로를 피하려고합니다. C#에서는 검사되지 않은 키워드가 있고 C++에서는 오버플로가 예외로 끝나지 않습니다.C#이 C#에 해당하는 항목이 무엇입니까?

참고로 선택하지 않은 내용은 here입니다. 기본적으로 다음을 수행 할 경우 :

unchecked 
{ 
     int1 = 2147483647 + 10; //this overflows in CLI but is ok in C# and C++ 
} 

C#에서는 오버플로가 발생하지 않고 최하위 비트를 사용하여 int로 변환됩니다. 예를 들어, 해시 코드를 계산할 때 적합합니다.

참고 : 이에 상응하는 C++ 키워드가 없다는 것을 알았지 만 일부 비트 이동은 그 트릭을 수행해야합니다.

+0

'unchecked'가 기본 동작입니다 (컴파일러가 재정의하지 않은 경우). – leppie

+0

관리되는 C++ (CLI)에서는 오버플로 예외가 발생합니다. 나는 그 질문을 편집하고있다. –

+1

@downvoters - 이유가 무엇입니까? –

답변

3

네이티브 C++에서 일반적인 확인되지 않은 동작을 얻으려면 메서드를 사용하여 #pragma unmanaged을 사용할 수 있습니다.

2

비트 연산 및 체크섬에 부호없는 데이터 형식을 사용합니다. 부호없는 동작의 랩 어라운드 동작은 C++에서 잘 정의되어 있습니다.

관련 문제