c++ - 将纳秒转换为秒和纳秒

标签 c++ time integer-arithmetic

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

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/

相关文章:

android - 在 Android 的 TimePicker 中显示当前时间

c++ - 我的 C++ 代码在宏+模板编译时失败,为什么会出现这个错误?

c++ - 为什么使用对象实例而不是 class::static 函数?

c++ - 编程 Arduino 与标准 C 有何不同?

java - 长数组的精确和

c - C语言对8位数字的算术运算过程

java - Java 中复合赋值(+=、-=、*=、...)的混淆

c++ - PlayFunction 在 DLL 中不起作用,但在独立 exe 中起作用

python - 将毫秒转换为小时、分钟和秒 python

java - 为什么使用带有 YYYY 模式的 DateTimeFormatter 格式化日期会给出错误的年份?