c#规则:a mod b,而a大于b

时间:2016-07-21 13:32:02

标签: c#

我正在检查有关运算符重载的代码,如果第二个变量大于59,我会看到一种使用%将秒转换为分钟的有趣方法。

似乎a<b(两个int)a%b返回a,我之前没有读过关于此的规则,我想知道为什么它返回a,是关于它们被声明为整数,是还有关于%的规则吗?

由于

3 个答案:

答案 0 :(得分:1)

%是模运算符。模运算a % b返回除法中的余数z

a / b = x, remainder z

换句话说,它在此等式中返回y

x * b + y = a

*第二个等式也说明了为什么它也适用于小数。**

因此,以下示例(未完成)为真:

-5 % 4 = -1
-4 % 4 = 0
-3 % 4 = -3
 ...
 1 % 4 = 1
 2 % 4 = 2
 3 % 4 = 3
 4 % 4 = 0
 5 % 4 = 1
 ...
 101.4 % 100.3 = 1.1

在您将秒转换为分钟和秒的示例中,您可能会阅读如下内容:

int totalseconds = 72;
int minutes = totalseconds / 60; // == 1
int seconds = totalseconds % 60; // == 12

这是同一件事:minutes计算为totalseconds / 60,这是一个整数除法,“舍入”为正整数的较低整数,因此1的结果。剩余的秒数计算为7260的剩余部分。

你也可以像

一样计算秒数
int seconds = totalseconds - (minutes * 60)

答案 1 :(得分:0)

a mod ba / b的剩余部分,因此如果a < b AND a > -b余数始终为a

以下规则对C#有效,但在其他语言中可能有所不同,请参阅Modulo operation page on Wikipedia以获取更多信息。

0 mod 3 = 0
1 mod 3 = 1
2 mod 3 = 2
3 mod 3 = 0
4 mod 3 = 1

-1 mod 3 = -1  // 2 in some languages
-2 mod 3 = -2  // 1 in some languages
-3 mod 3 = 0
-4 mod 3 = -1  // 2 in some languages

// if your language supports mod of floats
1.5 mod 3 = 1.5
5.5 mod 3 = 2.5
-1.5 mod 3 = -1.5  // 1.5 in some languages
-5.5 mod 3 = -2.5  // 0.5 in some languages

答案 2 :(得分:0)

一般情况下,对于任何a和任何b

a / b =(SomeConstant * b)+ RemainderOfb *

因此,如果a = 2b = 5表示a < b,那么:

  

为了接近一个,你需要多少个SomeConstant乘以b?一旦你接近,剩下的是什么?

所以,如果

a / b = (5 * 0) + 2

表示剩余= 2 超出5个。

然后:a % b表示与b相关的余数,即= 2.

如果a = 3b = 2表示a > b,那么:

  

如果你从a中删除了所有&#34; b&#34; s,什么是剩余?你可以做   这很简单:减去&#34; a&#34;来自&#34; b&#34;直到你无法减去   了。或者:

a / b = SomeConstant * a (which is how many "a"s did you subtract) + Remainder

替换:

a / b = (1 * 2) + 1

意味着2

中的剩余= 1

然后a % b等于余数与a相等,即= 1