C# 取模运算符

45

我可以编写这个程序

int a = 3;
int b = 4;

Console.WriteLine(a % b);

我得到的答案是3。为什么3 mod 4等于3?

我无法理解这样计算的方式。


35
结果是正确的。你原本期望它返回什么? - Alfred Myers
5
你想的是 b 除以 a,而不是 a 除以 b。 - Jimmy Hoffa
1
我不太确定会发生什么,但我无法理解余数为3的情况。 - Ben Ziegler
1
它是模数运算符还是余数运算符?当除数为负数时,它们是不同的。具体来说,两者都计算D = dq + r中的r,但是模数向负无穷方向舍入d,而余数向零方向舍入d - isekaijin
零个4可以被3整除,余数为3。 - Jodrell
显示剩余3条评论
8个回答

135

我不太确定会发生什么事情, 但是我无法解释剩下的部分为什么是3。

假设你有3个饼干,想要平均分给4个人吃。

因为人数比饼干数量多,所以没有人分到饼干(商 = 0),而你自己则剩下了3个饼干(余数 = 3)。 :)


77
在这时,其他三个人会突然袭击你并夺走你的饼干。 - Michael Madsen
13
这个答案似乎用更简单易懂的方式回答了提问者的问题。现在连我也明白为什么是3了,谢谢。哈哈 - Nahydrin
@MichaelMadsen 留给你 0。现在我懂了! - Cullub
8
这通常是我分给孩子们冰淇淋的方式。因为每个人都不能得到足够的份额,所以我会拿剩下的部分。 - Peter
1
这太棒了,我喜欢饼干。 - dinotom
请提供更多这样的答案! :) - imsan

75

这确实很有趣。但是,您可以通过在被除数上添加小数点和更多的零来扩展数学问题,以使其最终能够平均分配,这将等于0.75作为商和没有余数。我不知道模运算符不会做到这一点,这就是为什么我问这个问题的原因。 - Ben Ziegler
4
.75不是商数。按定义,商数必须是整数。 - quantumSoup
2
只考虑整数,不考虑小数。 - Lost in Alabama
2
我一直在想小数,但其实不需要。感谢大家的回复,非常有帮助。 - Ben Ziegler
这里提醒一下其他可能正在查看此内容的人 - 如果允许小数,那么你永远不会有余数,取模运算符也就无用了。在这种情况下,3/4 = 0 r3。 - Jesse Williams
显示剩余2条评论

19

3 mod 4是将3除以4的余数。

在这种情况下,4不能整除3,因此商为0,余数为3。


6
我发现被采纳的答案令人困惑且误导。 模数(Modulus)与现代除法不同,后者返回被除数和除数的比值。这通常表示为包含余数在商中的十进制商数(decimal quotient)。这就是让人们困惑的地方。 模数只是在除法中使用之前的余数
例如:两个数字的除法通常表示为一个十进制数(decimal number)(商数)。但是,例如1/3的除法结果也可以用整数表达为“余数为1的0”。但是,在现代数学中,这种商数形式并不太有用,因此我们经常看到返回的是十进制值或两个数字的比率(ratio)
1 / 3 = .333333333......

但是模运算并不是这样工作的。它会忽略从除法中返回的小数商值或比率,在 1/3 的商式中提取“0余1”的商式,并提取出从该除法返回的 1 或余数。它只是从商中剥离余数,然后将在其转换为十进制之前的除法余数返回。下面是模运算的工作原理...

1 % 3 = 1

因此,更好的描述 Modulus 的方式是说它是在将第二个数(除数)尽可能多次地除入第一个数(被除数)后所剩下的整数(余数)。

1 % 1 = 0 because after dividing 1 into 1, one time, there's nothing left
2 % 1 = 0 because after dividing 1 into 2, two times, there's nothing left
1 % 2 = 1 because 2 won't go into 1, so 1 is left

模数运算(又称模运算)返回的这些“整数余数”在软件程序中非常有用,可以用于计算星期几、创建交替序列、判断一个数字是偶数还是奇数等。


4

我认为用户已经理解了答案。因为有很多优秀的程序员..简单来说,%指在用您自己的整数除法后的余数。

例如:

int a = int.Parse(Console.ReadLine());
int b = a % 2;

现在你输入13,它会返回1,因为在简单的数学中,将13除以2后余数是1。希望你明白了这个概念。

感谢你的解释。 - Nick

2

正如其他人所解释的那样,如果您不想使用“mod”运算符。这里是计算“a”除以“n”的余数的方程:

a-(n* int(a/n))


0

也许C#的实现是不言自明的 -

static void Main(string[] args)
{
    int a = 3;
    int b = 4;
    Console.WriteLine(a % b);
    Console.WriteLine(MOD(a,b));
    Console.ReadKey();
}
public static int MOD(int a, int b)
{
    int i, j, k;

    i = a / b;
    j = i * b;
    k = a - j;

    return k;
}

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接