32位linux下使用gettimeofday獲取毫秒一直返回負數記錄
阿新 • • 發佈:2019-02-16
之前為了測試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型別,這樣就不會造成溢位了。
看來基本功是不紮實呀=。=