2017-01-28 8 views
-1

이의 WndProc의 C#을 응용 프로그램 재정에서 나는 데 라인 중 하나입니다수있는이 표현 던져 예외

int hiWord = unchecked((short)((long)m.LParam >> 16)); 
if (hiWord != 0) 
{ 
    // do something 
} 

그것이 산술 예외를 던질 수 있음을 수 있습니까?

답변

1

아니요, 예외를 발생시키지 않지만 오른쪽 시프트 연산자의 산술 세부 사항을 완전히 알고 있어야합니다. (LParam이 노래 된 값인 경우) 가장 높은 순서의 부호 비트가 유지되고 long 값의 값이 short으로 잘 리게됩니다. 최상위 48 비트는 제거되고 나머지 16 비트는 리턴됩니다.

+0

왜 단기간에서 장기간 주조가 오버플로를 생성하는지 설명 할 수 있습니까? –

+0

@LeonHavin 장황하지 않고 주조에 오버플로가 없으며 잘립니다. 내 대답을 편집하고 오버플로라는 단어를 삭제했습니다. 오른쪽 시프트 연산자 인 >> >>의 부호 비트를 가리키려고 했으므로 오버플로를 제거했습니다. –