之前为了测试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类型,这样就不会造成溢出了。


看来基本功是不扎实呀=。=

Logo

更多推荐