首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Arduino中的计数生成无意义的数字

Arduino中的计数生成无意义的数字
EN

Stack Overflow用户
提问于 2018-06-05 03:02:01
回答 1查看 27关注 0票数 0

我想将输入的时间日期转换为秒。

    case 1:
    lcd.setCursor(0, 0);
    lcd.print("Nastavte zacatek");
    lcd.setCursor(0, 1);
    lcd.print("                    ");
    lcd.setCursor(0, 1);
    lcd.print("Hodina: ");
    while (U == true && ch < 24) {
      ch++; //ch stands for hour variable, it is integer
      U = false;
      lcd.setCursor(9, 1);
      lcd.print(ch);
    }

我用这个来计算:

 zacatek = ((ch * 3600) + (cm * 60) + cs);

zacatek是无符号的长字符,cm和cs的输入方式与ch相同(但在其他情况下)。然后我使用Serial.println(zacatek);在Serial上打印它,但是例如,对于时间20:0:0(ch = 20,cm = 0,cs = 0),它返回我6464。或者,对于时间19:16:0,它返回我3824。有人能告诉我问题出在哪里吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-05 04:00:48

在大多数Arduino板上,int值是16位宽,所以如果你将3600*20相乘,得到的数字将比65535大得多,这是uint16_t的最大值。但是,如果你将72000 - 65536相减,你将得到值6464。顺便说一句:有符号整数溢出行为未由C++规范定义(它依赖于平台),但它通常作为32767溢出到-1,作为-32768溢出到0

如果需要更大的值,请改用int32_tuint32_t。对于常量,可以使用INT32_C(3600) * chUINT32_C(3600) * ch -如果您不想更改ch的数据类型。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50687153

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档