我一直在用C ++在接口“ clock_gettime(CLOCK_MONOTONIC,&CurrentTime)”提供的Linux计时器结构上进行操作。

#include <iostream>
#include <time.h>

int main()
{
    struct timespec CurrentTime;
    CurrentTime.tv_sec = 28220;
    CurrentTime.tv_nsec = 461189000;

    unsigned long long TimeNow;
    TimeNow = (28220 * 1000000) + (461189000 * 0.001);

    std::cout << TimeNow;
}


但是结果总是将TimeNow设为零。

如果有人对这个问题有答案或可以跟进,我将不胜感激。
使用GCC编译器完成

可以在此处找到代码已截断
http://rextester.com/XRR83683

最佳答案

在该行中:

TimeNow = (28220 * 1000000) + (461189000 * 0.001);


(28220 * 1000000)部分是使用int s计算的,并且(使用32位int)溢出会给出错误的值(可能为-1844771072)。

(461189000 * 0.001)部分是使用double s计算的,这是因为0.001双常量,给出461189.0作为double

然后将两者加在一起,得到负的double值...当将该负的double转换为unsigned long long分配给TimeNow时,它正转换为0,可能是因为这是最接近的值其范围为任何负数。这与将负整数类型转换为无符号类型(后者会“环绕”)不同。

08-26 04:48