我一直在用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,可能是因为这是最接近的值其范围为任何负数。这与将负整数类型转换为无符号类型(后者会“环绕”)不同。