私は、次の式に関してモジュラス演算子を理解しています:
7 % 5
これは5が7に1になり、残りの2を与えるという事実のために2を返しますが、このステートメントを読み返して読むと混乱が生じます。
5 % 7
これにより、値が5になり、少し混乱します。 7の全体は5にはなりませんが、その一部はそうなりますが、なぜ剰余がないか、または正または負の2の剰余がありませんか?
7がまったく5にならないという事実に基づいて5の値を計算している場合、なぜ残りは5ではなく7ではないのですか?
モジュラス演算子を理解する上で、ここに欠けているものがあるように感じます。
(この説明は正数のみです。それ以外の場合は言語に依存するためです)
定義
Modulusは、ある数値を別の数値で割ったユークリッド除算の剰余です。 _%
_はmodulo操作と呼ばれます。
たとえば、_9
_を_4
_で割った値は_2
_に等しくなりますが、_1
_のままです。ここで、_9 / 4 = 2
_および_9 % 4 = 1
_。
あなたの例では、5を7で割ると0になりますが、5(_5 % 7 == 5
_)のままです。
計算
モジュロ演算は、次の方程式を使用して計算できます。
_a % b = a - floor(a / b) * b
_
floor(a / b)
は、a
をb
で除算できる回数を表します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になるはずです。
ここでの答えのいくつかは、私が理解するのが複雑です。これを見る方法を単純化するために、もう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
お役に立てば幸いです。
他の人が指摘したように、モジュラスは剰余システムに基づいています。
モジュラスについて考えるより簡単な方法は、被除数(除算される数値)が除数で完全に除算された後に残るものだと思います。 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%5 = 2。
5%7 = 5
3%7 = 3
2%7 = 2
1%7 = 1
配列インデックスを決定するために関数内で使用される場合。安全なプログラミングですか?それは別の質問です。私は推測する。
ステップ1:5/7 = 0.71
ステップ2:小数の左側を取るため、0.71から0を取得し、7 0 * 7 = 0を乗算します。
ステップ#:5-0 = 5;したがって、5%7 = 5
残りを見つける新しい方法を以下に示します
ステートメント:剰余は常に一定です
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.
残りの部分だけです。方法をお見せしましょう
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
モジュラス演算子は、結果を「削減された残留システム」で提供します。たとえば、mod 5の場合、5つの整数がカウントされます:0,1,2,3,4。実際に19 = 12 = 5 = -2 = -9(mod 7)。答えが「削減された残渣システム」によるプログラミング言語によって与えられる主な違い。
次のように配置します。
実際には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を返します...
それでおしまい ...