【问题标题】:Interpretation of an integer division - C code整数除法的解释——C代码
【发布时间】:2020-02-08 09:12:14
【问题描述】:

我有以下 C 代码:

int count = 0; // relative time
int T1 = 20; // period 1 in ms
int T2 = 50; // period 2 in ms
int T3 = 80; // period 3 in ms
   while (1) {
      if (count%T1 == 0) function1();
      if (count%T2 == 0) function2();
      if (count%T3 == 0) function3();
      count++;
      if (count == T1*T2*T3) count = 0;
      delay(1); // wait for 1 ms
   }

我想知道整数除法 count%T1==0 而不是 count==T1 的原因。也许是考虑到周期T1可能不是整数?

提前谢谢你。

【问题讨论】:

    标签: c integer-division


    【解决方案1】:

    从您发布的代码来看,它是这样的:

    • function1 将被调用 20ms
    • function2 将被调用 50ms
    • function3 将被调用 80ms
    • 计数器在 80 秒 (20*50*80ms) 时重置。

    这里的关键字是every

    我们以function1 触发器为例。

    如果你写count == T1function1 只会在重置前执行一次,此时count 等于20

    如果你想运行function1 20ms,你会期望它以20ms、40ms、60ms等执行。

    要将此概念转换为代码,您需要通过模运算符检查计数器是否可被 20 整除,因此是 count % T1 表达式。

    同样的概念适用于T2T3 检查。

    【讨论】:

    • 嗨@MatteoPasini 如果我将count=T1*T2*T3 替换为count=max(T1, T2, T3),我可以使用条件count==T1 吗?
    猜你喜欢
    • 2018-12-22
    • 1970-01-01
    • 1970-01-01
    • 2013-08-24
    • 2014-11-14
    • 2013-10-14
    • 2014-02-06
    • 2018-05-16
    • 1970-01-01
    相关资源
    最近更新 更多