在我的项目中,我使用struct timespec
如下
struct timespec start, end; clock_gettime(CLOCK_REALTIME,&start); /* Do something */ clock_gettime(CLOCK_REALTIME,&end);
((((unsigned64)start.tv_sec) * ((unsigned64)(1000000000L))) + ((unsigned64)(start.tv_nsec))))
返回一个值。
任何人都可以告诉我们为什么我们使用unsigned64
格式,也帮助我详细了解这个结构?? 我在我的研究中使用了这个代码,以时间计算的精度为纳秒代码执行时间
一个无符号的32位类型(比如现代平台上的unsigned int
)的最大值有四十多亿。 如果你有5并且乘以十亿(就像问题中的代码所做的那样),你将得到一个50亿的值,大于32位无符号类型中的值。 输入64位类型,它可以保存更高的值( 18446744073709551615
更精确,与无符号32位最大值(仅4294967295
)进行比较)。
顺便说一下,代码可以简化如
start.tv_sec * 1000000000ULL + start.tv_nsec
这种简化是可能的,因为编译器会根据需要自动将低精度类型和值转换为更高精度。 由于表达式中有一个unsigned long long
(这就是ULL
意思)字面值,所以其余的表达式也将被转换为unsigned long long
,结果将是unsigned long long
类型。