在C中使用模运算符会产生一些奇怪的结果

时间:2014-03-19 09:10:19

标签: c operators

如何用C语言进行模运算?

请阅读下面的代码。

#include <stdio.h>

int main(void)
{       
    int i = 100;

    printf("%d\n", i%100);
    printf("%d\n", i%240);
    printf("%d\n", i%40);
    printf("%d\n", i%10);


    return 0;
}

结果是

$ ./modulus
0
100
20
0

请告诉我如何正确使用它。

修改

抱歉,我在代码中犯了一个错误。该部门应该像下面的代码一样来到其他地方。

printf("%d\n", 100%i);
printf("%d\n", 240%i);
printf("%d\n", 40%i);
printf("%d\n", 10%i);

我期待的是当值乘以100时获得0;

我很抱歉这个错误。但伙计们,请撤消我的downvotes。

3 个答案:

答案 0 :(得分:1)

modulo division的结果是给定数字的integer division的剩余部分(在正数上)。

这意味着:

100 / 100 = 1, remainder 0
=> 100 mod 100 = 0

100 / 240 = 0, remainder 100
=> 100 mod 240 = 100

100 / 40 = 2, remainder 20
=> 100 mod 40 = 20

100 / 10 = 10, remainder 0
=> 100 mod 10 = 0

答案 1 :(得分:1)

嗯,它运作正常。你期望看到什么?

模运算符(模运算的实现),得到除法余数。例如:

a % b = c

可以改写为a = b * d + c,其中a,b,c,d是整数。

因此,100%40 = 20,因为100 = 40 * 2 + 20

答案 2 :(得分:0)

您获得的输出是正确的。当您执行两个数字的整数除法时,模数运算符返回余数。

在你的情况下

  • 100 mod 100 = 0 as 100 = 100 * 1 + 0
  • 100 mod 240 = 100 as 100 = 240 * 0 + 100
  • 100 mod 40 = 20 as 100 = 40 * 2 + 20
  • 100 mod 10 = 10 as 100 = 10 * 10 + 0

希望有所帮助:)