日常问题-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,这样就不会造成溢出了。

gettimeofday函数time函数都可以用于获取当前时间,但它们有一些区别。 1. gettimeofday函数: gettimeofday函数是一个系统调用,用于获取当前时间的秒数和微秒数。它的原型如下: ```c int gettimeofday(struct timeval *tv, struct timezone *tz); ``` 其中,tv是一个指向timeval结构体的指针,用于存储获取到的时间信息。tz是一个指向timezone结构体的指针,用于存储时区信息。但是在实际使用中,通常将tz设置为NULL即可。 2. time函数time函数是一个库函数,用于获取当前时间的秒数。它的原型如下: ```c time_t time(time_t *t); ``` 其中,t是一个指向time_t类型的指针,用于存储获取到的时间信息。但是在实际使用中,通常将t设置为NULL即可。 区别: 1. 返回值类型不同: - gettimeofday函数返回0表示成功,返回-1表示失败。 - time函数返回当前时间的秒数。 2. 精度不同: - gettimeofday函数可以获取到微秒级别的时间信息。 - time函数只能获取到秒级别的时间信息。 3. 使用方式不同: - gettimeofday函数需要传入一个指向timeval结构体的指针,用于存储获取到的时间信息。 - time函数可以直接返回当前时间的秒数。 范例:根据提供的引用内容,可以得出以下结论: gettimeofday函数time函数都可以用于获取当前时间,但是gettimeofday函数可以获取到微秒级别的时间信息,而time函数只能获取到秒级别的时间信息。此外,gettimeofday函数是一个系统调用,而time函数是一个库函数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值