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

同事打印的时候:

以lu的方式进行打印,会丢失精度,数值有误

printf("ms:%lu \n",__getmstime());

正确的输出方式为%llu:

printf("ms:%lu \n",__getmstime());

 

这个真是蠢爆了。。不自己操作怎么也不会真正认识到错误!
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值