web-dev-qa-db-ja.com

C#モジュラス演算子

私はプログラムを書くことができます

int a = 3;
int b = 4;

Console.WriteLine(a % b);

私が得る答えは3です。3mod 4 = 3はどうですか???

これがこのように計算される方法を理解できません。

26
Ben Ziegler

残りの3/4 = 3だからです。

http://en.wikipedia.org/wiki/Modulo_operator

残りが3である理由がわからない場合は、ここにいくつかの より深刻な問題 があります。

50

私は何を期待するのかよくわかりませんでしたが、残りが3である方法を理解できませんでした。

したがって、3つのCookieがあり、4人で均等にdivideにしたいとします。

Cookieよりも人の数が多いため、誰もCookie( = 0)を取得せず、remainderが3つのCookieを取得します。 :)

59
quantumSoup

3 mod 4は、3を4で割った余りです。

この場合、4は3になり、残りは3になります。

16
Gabe Moothart

他の人が説明したように、 "mod"演算子を使用したくない場合。以下は、「a」を「n」で割った余りを計算する方程式です。

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

2
ajay

私はすでにユーザーが答えを理解しているかもしれないと思っています..多くの優れたプログラマーがいるので..簡単な言い方で%は、独自の整数で除算した後、リマインダーを通知します。

例えば.

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

これで13と入力すると、単純な数学では13を2で割った後、残りが1になるので、1になります。よろしくお願いします。

1
Rehan Manzoor

私は答えが紛らわしく、誤解を招くのを見つけました....

モジュラスは、秒を可能な限り何度もそれに分割した後、最初の数に残されるものです。

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
0
Stokely

もう1つは「他の人が説明したとおり」ですが、モジュラスを実行するいくつかの方法(または別の方法を使用する方法)に興味がある場合は、 いくつかの異なる方法のベンチマークとなるこの記事を参照 できます。

基本的に、最も高速な方法は、次のような古き良き係数演算子です。

if (x % threshold == some_value)
{
    //do whatever you need to
}
0
user3810913