整数除法的解释——C代码

Posted

技术标签:

【中文标题】整数除法的解释——C代码【英文标题】:Interpretation of an integer division - C code 【发布时间】: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可能不是整数?

提前谢谢你。

【问题讨论】:

【参考方案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 吗?

以上是关于整数除法的解释——C代码的主要内容,如果未能解决你的问题,请参考以下文章

辗转相除法求最大公约数c语言代码

Python中整数除法的余数为负

C中的类型混合整数除法:编译器错误或定义的行为?

c语言辗转相除法求最大公约数和最小公倍数

两行代码求解C语言最大公约数

C整数除法和下限