日常问题-gettimeofday()函数溢出

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值