1. 程式人生 > >gettimeofday 獲取毫秒時間溢位問題

gettimeofday 獲取毫秒時間溢位問題

之前為了測試C中程式碼執行消耗的時間,所以寫了這麼一個函式:

long long __getmstime() {     timeval tv;     gettimeofday(&tv, NULL);     return tv.tv_sec * 1000 + tv.tv_usec / 1000; }

之前只是做減法算相差時間,今天突然做了一次輸出__getmstime的時間,發現居然是負數, 32位的機器使用long long型別不可能會結果溢位,於是我使用了double型別,依然如此,覺得很奇怪。

但是這種表現一定是溢位啊。

這時想到了C的型別自動轉換,tv.tv_sec * 1000這裡的計算應該沒有進行型別轉換,之後會得到一個

溢位的負數,之後返回的時候雖然強轉成了Long long,但是已經悲劇了,誒。

最後改改:

long long __getmstime() {         timeval tv;         gettimeofday(&tv, NULL);         return ((long long)tv.tv_sec) * 1000 + tv.tv_usec / 1000; }

先把tv.tv_sec轉成long long型別,這樣就不會造成溢位了。

看來基本功是不紮實呀=。=