web-dev-qa-db-ja.com

モジュラス演算子の理解%

私は、次の式に関してモジュラス演算子を理解しています:

7 % 5

これは5が7に1になり、残りの2を与えるという事実のために2を返しますが、このステートメントを読み返して読むと混乱が生じます。

5 % 7

これにより、値が5になり、少し混乱します。 7の全体は5にはなりませんが、その一部はそうなりますが、なぜ剰余がないか、または正または負の2の剰余がありませんか?

7がまったく5にならないという事実に基づいて5の値を計算している場合、なぜ残りは5ではなく7ではないのですか?

モジュラス演算子を理解する上で、ここに欠けているものがあるように感じます。

46

(この説明は正数のみです。それ以外の場合は言語に依存するためです)

定義

Modulusは、ある数値を別の数値で割ったユークリッド除算の剰余です。 _%_はmodulo操作と呼ばれます。

たとえば、_9_を_4_で割った値は_2_に等しくなりますが、_1_のままです。ここで、_9 / 4 = 2_および_9 % 4 = 1_。

Euclidean Division

あなたの例では、5を7で割ると0になりますが、5(_5 % 7 == 5_)のままです。

計算

モジュロ演算は、次の方程式を使用して計算できます。

_a % b = a - floor(a / b) * b
_
  • floor(a / b)は、abで除算できる回数を表します
  • floor(a / b) * bは、完全に共有された量です
  • 合計(a)から共有されたものを引いたものが、除算の残りに等しくなります

最後の例に適用すると、次のようになります。

_5 % 7 = 5 - floor(5 / 7) * 7 = 5
_

モジュラー演算

とはいえ、あなたの直感は、5ではなく-2になる可能性があるということでした。実際、モジュラー演算では、-2 = 5 (mod 7)は、_7k - 2 = 5_のようなZにkが存在するためです。

モジュラー算術を学んでいないかもしれませんが、おそらく角度を使用し、360を法とするため、-90°は270°と同じであることを知っているでしょう。だから、円を取り、それが境界線であると言う7です。そして、あなたは5であると読んでください。そして、10で試してみると、_10 % 7_が3であるため、3になるはずです。

82
Maxime Chéramy

ここでの答えのいくつかは、私が理解するのが複雑です。これを見る方法を単純化するために、もう1つ答えを追加しようとします。

プロセスは基本的に2つの質問をすることです。

例:7%5

(1)7を取得するために5を掛ける数値は?(0から開始)

やってみよう:

0そう、0 x 5 = 0

それでも、私たちは短いので1つ(+1)を追加します。

1そう、1 x 5 = 5

まだ7つが得られていないので、1つ(+1)を追加します。

2そう、2 x 5 = 10

7を超えました。したがって、2は正しくありません。ステップ1(1を使用した場所)の値に戻り、結果は5でした。

(2)7を取得するために5にどれだけ追加する必要がありますか?

番号が2であることは明らかです。7-5 = 2

7 % 5 = 2;

例:5%7

1- 5を得るために7を掛けるのに使用する数字は何ですか?

やってみよう:

0そう、0 x 7 = 0

まだ5はありませんでしたが、もっと大きな数字を試してみましょう。

1そう、1 x 7 = 7

いいえ、5を超えました。前のステップに戻って0を使用し、結果0を取得します。

2-左側の数値の値に到達するために0(ステップ1で取得した数値)に追加する必要がある量5

番号が5であることは明らかです。5-0 = 5

   5 % 7 = 5

お役に立てば幸いです。

7
Mohammed Joraid

他の人が指摘したように、モジュラスは剰余システムに基づいています。

モジュラスについて考えるより簡単な方法は、被除数(除算される数値)が除数で完全に除算された後に残るものだと思います。 5%7について考えると、5を7で割ると、7は5回だけ5になり、5から0(7 * 0)を引くと(小学校で学んだように)、残りは5(mod)になります。下の図を参照してください。

   0
  ______
7) 5    
__-0____
   5

同じロジックを使用すると、-5 mod 7は-5になります(-5と-5-0 * 7 = -5に入れることができるのは0 7だけです)。同じトークンで-5 mod -7も-5になります。さらに興味深いケース:

5 mod(-3)= 2すなわち5-(-3 * -1)

(-5)mod(-3)= -2すなわち-5-(-3 * 1)= -5 + 3

7
Dean Sha

モジュラスは剰余系です。

したがって、7%5 = 2。

5%7 = 5

3%7 = 3

2%7 = 2

1%7 = 1

配列インデックスを決定するために関数内で使用される場合。安全なプログラミングですか?それは別の質問です。私は推測する。

4
nammalvar 2.0

ステップ1:5/7 = 0.71

ステップ2:小数の左側を取るため、0.71から0を取得し、7 0 * 7 = 0を乗算します。

ステップ#:5-0 = 5;したがって、5%7 = 5

2
Yongama

残りを見つける新しい方法を以下に示します

ステートメント:剰余は常に一定です

ex : 26 divided by 7 gives R : 5 

これは、除数に近い26を完全に分割する数を見つけ、両方の差を取ることで簡単に見つけることができます。

13 is the next number after 7 that completely divides 26 because after 7 comes 8, 9 ,

10, 11, 12 where none of them divides 26 completely and give remainder 0.
So 13 is the closest number to 7 which divides to give Remainder 0.
now take the difference (13 ~ 7) = 5 which is the Remainder .

note : for this to work divisor should be reduced to its simplest form ex: if 14 
is the divisor ..7 has to be chosen to find the closest number dividing the dividend.
1
Pramod Bhat

残りの部分だけです。方法をお見せしましょう

10 % 5=0
9 % 5=4 (because the remainder of 9 when divided by 5 is 4)
8 % 5=3
7 % 5=2
6 % 5=1

5 % 5=0 (because it is fully divisible by 5)

ここで1つ覚えておく必要があります。modは剰余を意味します。

4 % 5=4

しかし、なぜ4? 5 X 0 = 0なので、0は4未満の最も近い倍数であるため、4-0 = 4

1
Siddarth Nyati

モジュラス演算子は、結果を「削減された残留システム」で提供します。たとえば、mod 5の場合、5つの整数がカウントされます:0,1,2,3,4。実際に19 = 12 = 5 = -2 = -9(mod 7)。答えが「削減された残渣システム」によるプログラミング言語によって与えられる主な違い。

0
GokcenG

次のように配置します。
実際にはModulus operatorは同じ除算を行いますが、答えは気にしません。たとえば、7を除算する場合は注意してください5に、
そのため、簡単な例を紹介します。
think 5はブロックであるため、たとえば15に3ブロック(WITH Nothing Left)がありますが、その場合はlogincこの種類の数字{1,3,5,7,9,11、...}になります。ここでモジュラスが出てきます。したがって、前に言った論理を取り、7に適用します。 7に5のブロックが1つあり、2つのリマインダーが手元にあることを確認します。それがモジュラスです!!!
しかし、あなたは約5%7を求めていましたよね?
だから、私が言ったロジックを使ってください。
したがって、モジュラスは0を返します...
それでおしまい ...

0
a_m_dev