【问题标题】:C++ ESP32 - 86400000000 is printed as 500654080C++ ESP32 - 86400000000 打印为 5006540​​80
【发布时间】:2023-02-13 04:15:16
【问题描述】:

我正在使用 Arduino 开发 ESP32,由于某种原因打印的值不同,原因是什么?

auto reset_time = 24L * 60 * 60 * 1000 * 1000; //86400000000

  Serial.print("Reset Timer in: ");
  Serial.println(reset_time);

  Serial.print((reset_time / 1000));
  Serial.println(" ms");

  Serial.print((reset_time / 1000 / 1000));
  Serial.println(" s");

  Serial.print((reset_time / 1000 / 1000 / 60));
  Serial.println(" m");

  Serial.print((reset_time / 1000 / 1000 / 60 / 60));
  Serial.println(" h");

这会产生以下输出:

21:05:58.310 -> Reset Timer in: 500654080
21:05:58.310 -> 500654 ms
21:05:58.310 -> 500 s
21:05:58.310 -> 8 m
21:05:58.310 -> 0 h

【问题讨论】:

  • 请注意 500654080 == 86400000000 % 2**32 您正在查看 32 位溢出。
  • 尝试使用24LL

标签: c++ arduino esp32


【解决方案1】:

86400000000 模 2^32 是 5006540​​80。

该值大于 32 位 int 的容量;你看到的是剩下的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-10
    • 1970-01-01
    • 2014-01-17
    • 1970-01-01
    • 2017-05-19
    • 2020-11-11
    • 1970-01-01
    相关资源
    最近更新 更多