使用“%”进行操作会产生意想不到的结果[重复]
Posted
技术标签:
【中文标题】使用“%”进行操作会产生意想不到的结果[重复]【英文标题】:Operation with "%" give an unexpected result [duplicate] 【发布时间】:2018-04-04 14:24:23 【问题描述】:我在the Dining Philosophers Problem 工作。使用我发现的这个循环分发叉子:
int philosophersNumber=5;
for (int i = 0; i < philosophersNumber; i++)
philosophers[i] = new Philosopher(
i,
forks[i],
forks[(i + 1) % philosophersNumber]
);
i:哲学家的编号 forks[i]:右手叉。 forks[(i + 1) %phthalsNumber]:左手的叉子。
如果我在循环中添加一些打印,输出如下所示:
----- PHILOSOHPER 0 ------
Right fork: 0
Left fork: 1
----- PHILOSOHPER 1 ------
Right fork: 1
Left fork: 2
----- PHILOSOHPER 2 ------
Right fork: 2
Left fork: 3
----- PHILOSOHPER 3 ------
Right fork: 3
Left fork: 4
----- PHILOSOHPER 4 ------
Right fork: 4
Left fork: 0
好吧,我的疑问很简单:为什么 (i+1) % 5 的结果总是与 i+1 相同,直到 i+1 为 5,即结果为 0? 我假设与变量的类型有关,但我真的不知道。
【问题讨论】:
你知道模数是做什么的吗? 【参考方案1】:简单的事情,% 是模数,这意味着整数除法的其余部分。如果对于 a%b,a a%b = a 因为剩下的就是一切。例如:
1%3 = 1;
2%3 = 2;
3%3 = 0;
4%3 = 1;
5%3 = 2 etc.
不是程序化的东西,它的数学。
【讨论】:
以上是关于使用“%”进行操作会产生意想不到的结果[重复]的主要内容,如果未能解决你的问题,请参考以下文章
MySQL - 使用 LEFT JOIN 会产生意想不到的结果
使用 Javascript 设置元素的宽度会产生意想不到的结果
在 while 循环中使用 -- 运算符会产生意想不到的结果