1

我有一个非常大的纳秒值(表示自纪元以来的纳秒),我尝试将其分解为自纪元以来的秒数和像这样的纳秒:

uint64_t nanosecondsEpoch;
unsigned secs = nanosecondsEpoch / 1000000000ULL;
unsigned nanos = nanosecondsEpoch - (secs * 1000000000ULL);

问题是如果我尝试像这样将它缝合在一起:

uint64_t stichBack = secs * 1000000000ULL + nanos

我得到了一些离题的东西。我认为原因是当我执行除法时,我得到 1357314854.03 秒,而 0.03 被丢弃(导致巨大差异)..但我很困惑,因为感觉我应该能够将两条信息都保存在未签名并在不诉诸浮动的情况下恢复信息?我是否在做一些我似乎无法理解的算术愚蠢的事情?

这是一个具体的例子:

从今天早上的某个时间开始的纳秒值:1357314854032484000

如果我可以使用 uint64_t 秒和纳秒无符号,但我想知道为什么我不能像上面那样打破上述值并将其重新组合在一起。

4

1 回答 1

2

由于1e9小于2^32-1(最大无符号 32 位整数),如果原始值足够大,商可能仍然太大而无法放入 32 位整数。不确定您的原始值是多少,但您可能会因此截断您的secs值。

于 2013-01-04T17:00:22.920 回答