整数除法的解释——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 == T1
,function1
只会在重置前执行一次,此时count
等于20。
如果你想运行function1
每 20ms,你会期望它以20ms、40ms、60ms等执行。
要将此概念转换为代码,您需要通过模运算符检查计数器是否可被 20 整除,因此是 count % T1
表达式。
同样的概念适用于T2
和T3
检查。
【讨论】:
嗨@MatteoPasini 如果我将count=T1*T2*T3 替换为count=max(T1, T2, T3),我可以使用条件count==T1 吗?以上是关于整数除法的解释——C代码的主要内容,如果未能解决你的问题,请参考以下文章