整数和浮点数之间的加法....导致零

Addition between Integer and Float.... resulting in a Zero

我一直在用C++对接口"clock_gettime(CLOCK_MONOTONIC, &CurrentTime)"[=25提供的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) 部分是使用 ints 计算的,并且(对于 32 位 int)溢出给出了不正确的值(可能是 -1844771072)。

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

然后将两者相加,得到负值 double...当负值 double 转换为 unsigned long long 以分配给 TimeNow 时,它被转换为 0,可能是因为这是其范围内最接近任何负数的值。这不同于将负整数类型转换为无符号整数,后者 "wrap around".