为了测试C中代码执行消耗的时间,所以用了gettimeofday()函数来做减法算相差时间,输出__getmstime的时间,发现居然是负数,32位的机器使用long long类型不可能会结果溢出,于是我使用了double类型,依然是负数,觉得很奇怪。但是这种表现一定是溢出啊。
原代码如下:
gettimeofday(&start,NULL);
......//操作代码
gettimeofday(&end,NULL);
long long timeuse = 1000000*(end.tv_sec - start.tv_sec) + end.tv_usec - start.tv_usec;
cout<<(double)timeuse/1000000<<endl;
这时想到了C的类型自动转换,end.tv_sec * 1000000和start.tv_sec * 1000000这里的计算应该没有进行类型转换,之后会得到一个溢出的负数,之后返回的时候虽然强转成了long long,但是已经晚了,所以计算结果出来是负数。
最后改改:
gettimeofday(&start,NULL);
......//操作代码
gettimeofday(&end,NULL);
long long timeuse = 1000000*((long long)end.tv_sec - (long long)start.tv_sec) + (long long)end.tv_usec - (long long)start.tv_usec;
cout<<(double)timeuse/1000000<<endl;
先把end.tv_sec和start.tv_sec先转成long long类型再乘1000000,这样就不会造成溢出了。