문제

나는 변환하고 싶다 long 에게 int.

값의 경우 long > int.MaxValue, 나는 그것을 감싸게되어 기쁘다.

가장 좋은 방법은 무엇입니까?

도움이 되었습니까?

해결책

그냥 해 (int)myLongValue. 그것은 당신이 원하는 것을 정확하게 수행합니다 (MSB를 버리고 LSB를 복용) unchecked 컨텍스트 (컴파일러 기본값). 던질거야 OverflowException 안에 checked 값이 값에 맞지 않으면 컨텍스트 int:

int myIntValue = unchecked((int)myLongValue);

다른 팁

Convert.ToInt32(myValue);

INT.MaxValue보다 클 때 그것이 무엇을할지 모르겠지만.

때때로 당신은 실제로 실제 가치에 관심이 없지만 체크섬/해시 코드. 이 경우 내장 방법입니다 GetHashCode() 좋은 선택입니다 :

int checkSumAsInt32 = checkSumAsIn64.GetHashCode();

안전하고 빠른 방법은 캐스트 전에 비트 마스킹을 사용하는 것입니다 ...

int MyInt = (int) ( MyLong & 0xFFFFFFFF )

비트 마스크 ( 0xFFFFFFFF ) int 크기가 기계에 의존하기 때문에 값은 int의 크기에 따라 다릅니다.

그렇지 않을 것입니다

(int) Math.Min(Int32.MaxValue, longValue)

수학적으로 말하는 올바른 방법이 되십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top