我有一个非常大的纳秒值(代表自纪元以来的纳秒),我试图将其分解为自纪元以来的秒和这样的纳秒:
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,但我想知道的是为什么我不能像上面那样打破上述值并将其放回原处。
最佳答案
由于1e9
小于2^32-1
(最大无符号32位整数),如果原值足够大,商可能还是太大大到适合 32 位整数。不确定您的原始值是多少,但您可能因此截断了 secs
值。
关于c++ - 将纳秒转换为秒和纳秒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14161251/