2014-05-16 1 views
0
Uint64_t a; 
Uint32 b; 

a= clock_cycles(); 
b= uint32((a*1000000)/(SYSPAGE_ENTRY(qtime)->cycles_per_sec)); 
printf("RECEIVE from Time in microseconds: %ld\n", b); 

위의 코드에서와 같이 변수를 생성하고 타임 스탬프를 가져 와서이를 uint32로 변환했습니다.타임 스탬프를 사용하는 데 왜 부정적인 가치가 있습니까?

b 값을 인쇄하면 음수 값을 얻게됩니다 !! 위와 같이하는 것이 잘못된 이유는 무엇입니까 ??

답변

1

b가 2^31보다 큽니다. Printf 형식 "% ld"는 부호있는 정수를 인쇄하려고 함을 나타내고 printf는 가장 높은 비트를 가진 숫자를 음수로 해석합니다. "% ld"대신 "% lu"을 (를) 사용하십시오.

또한 코드를 볼 때 a*1000000의 숫자 값이 가능한 최대 값을 초과 할 가능성이 큽니다. 귀하의 경우에는 다른 함수를 사용하여 마이크로 초 시간 (예 : gettimeofday)을 얻고 결과를 64 비트 정수로 저장하는 것이 좋습니다.

+0

% lu로 변경하면 단지 0,1,2가됩니다 !!! 그게 맞습니까? – user3635707

+0

% lu로 변경하면 음수 값을 얻지 못합니다. 그러나 산술 오버 플로우 문제는 잘못된 값을 얻을 수 있습니다. – Marian