2014-02-17 2 views
-2

나는 시간을 반환하는 타이머가 경과 :VB.NET ULONG는 오버 플로우

이제
Public Function TimeElapsed() As ULong 

    Dim ul As ULong 
    ul = m_lEnd - m_lStart 

    Dim ul2 As ULong 
    ul2 = ul - m_lOverhead 

    Dim ul3 As ULong 
    ul3 = (ul2/m_lFreq) * 1000 

    Return ul3 

End Function 

나는 다음과 같은 변수 경험 :

m_lEnd = 935083366402 
m_lStart = 935007142800 
ul2 = 76223588 
m_lOverhead = 14 

이 나에게 라인의 오버 플로우를 제공을

ul3 = (ul2/m_lFreq) * 1000 

버그를 개선하는 이유와 방법을 볼 수 없습니다.

도움 주셔서 감사합니다.

+2

'm_lFreq'가 – ps2goat

+0

인 것을 언급하지 않으 셨습니다. 'm_lFreq'에 무엇이 있습니까? – Neolisk

답변

0

ULong에서 연산을 수행하고 있음을 명시 적으로 컴파일러에게 알려야합니다 ... 이것은 숫자 리터럴이 기본값 인 Integers으로 기본 설정되어 있으므로 정수형 리터럴을 사용하여 문제와 같이 오버플로가 발생하기 때문입니다. 올바른 접미사를 사용하여 값을 다른 유형으로 강제 설정할 수 있습니다. 형식 접미사가없는 리터럴 값은 Long의 범위까지만 값을 가질 수 있습니다. 이 경우 ULong이므로 접미사는 UL입니다. 그런데

이 변환 에러입니다 ...에 대한 엄격한 끝에

EX: Dim m_lEnd As ULong = 935083366402UL 

공지 사항이 옵션을 설정, 이런 일이 필요 것입니다.

+0

이것이 upvote를 잊어 버리지 않았다면, 감사합니다! – Codexer