Modulus Divisonの仕組み


105

モジュラス除算の仕組みがよくわかりません。私が計算した27 % 16として巻き取っ11て、私はその理由を理解していません。

オンラインで素人の言葉で説明を見つけることができないようです。誰かがここで何が起こっているかについて非常に高いレベルで詳しく説明できますか?

回答:


107

モジュロ除算の結果は、指定された数値の整数除算の剰余です。

つまり:

27 / 16 = 1, remainder 11
=> 27 mod 16 = 11

その他の例:

30 / 3 = 10, remainder 0
=> 30 mod 3 = 0

35 / 3 = 11, remainder 2
=> 35 mod 3 = 2

66
これを間違った方法でとらないでください。しかし、あなたの例では、素晴らしい分割で何が起こっているのかまったくわからない誰かのために何も明らかにしていません。残りがどこから来るかを説明する非常に重要なステップを省略しました。以下のMarcin M.の回答は、プロセスをよりよく説明しています。コンセプトが全くわからないような方は、今後の回答で詳細にご検討ください。コミュニティに貢献してくれてありがとう!あなたのような人々が私を助け、私の教育の旅で私を助け続けます:)
Soundfx4

ウィキペディアにもかかわらず、係数と剰余は同じものではありません。一部の言語には、一方、他方、両方、および未定義の言語があります。
ローン侯爵

156

ほとんどの説明では1つの重要なステップが欠落しています。別の例を使用してギャップを埋めましょう。

次の場合:

Dividend: 16
Divisor: 6

モジュラス機能は、次のようになります。

16 % 6 = 4

これがなぜなのかを確認しましょう。

最初に、整数除算を実行します。これは、小数(剰余とも呼ばれます)が破棄されることを除いて、通常の除算と同様です。

16 / 6 = 2

次に、上記の除算の結果()に除数()を掛け2ます。6

2 * 6 = 12

最後に、上記の乗算の結果()を被除数()から減算12します。16

16 - 12 = 4

この減算の結果4残り、は、上記の係数の結果と同じです!


1
2,6666666667ではなく16/6のうち2を取得するにはどうすればよいですか?常に0を無視する必要があります... どうして?
Luc

3
@Luc Leoとytpillaiが述べているように、整数除算を使用しています(除算後の結果の小数部分は破棄されます)。Python 3:16 // 6 >>> 2および16 / 6 >>> 2.6666666666666665
bryik

30

時計の例は、モジュロを理解するのに役立つかもしれません。

モジュラー演算の一般的な使用法は、12時間制での使用で、1日は2つの12時間の期間に分割されます。

今回は15:00とし
ましょう。ただし、午後3時と言うこともできます。

これはまさにmoduloが行うことです:

15 / 12 = 1, remainder 3

この例は、ウィキペディアでよりよく説明されています。ウィキペディアのModulo記事


29

モジュラスを計算するための簡単な式は次のとおりです。

[Dividend-{(Dividend/Divisor)*Divisor}]

したがって、27%16:-

27- {(27/16)* 16}

27- {1 * 16}

回答= 11

すべての計算は整数を使用します。10進数の商の場合、10進数の後の部分は無視または切り捨てられます。

例:27/16 = 1.6875は、上記の式では1と見なされます。0.6875は無視されます。

コンピューター言語のコンパイラーは、小数部を含む整数を同様に(小数部の後に切り捨てることで)扱います


3%7はどうですか?
eaglei22、2018年

だから、それはちょうど3でしょうか?
eaglei22、2018年

15

モジュラス演算子は、除算ステートメントを取り、その計算から残っているもの、いわば「残りの」データ(13/5 = 2など)を返します。つまり、残りの3、またはその計算から残っていることを意味します。どうして?2 * 5 = 10なので、13-10 = 3になります。

係数演算子は、すべての計算を13%5 = 3で実行します。


この答えはそれを概念的な観点から最もよく説明すると思います。他の答えは数学的にもこれが必要であることを説明しますが、これは、モジュロ演算子をどのように適用できるかを理解するのに役立ちます。
JonnyB 2015年

7

モジュラス除算はこれだけです:2つの数値を除算し、残りのみを返します

27/16 = 1、残り11、したがって27%16 = 11

同上43/16 = 2 11が残っているため、43%16 = 11も



5

もう1つ追加したいと思います。

被除数が除数より大きい/大きい場合、モジュロを計算するのは簡単です

配当= 5除数= 3

5%3 = 2

3)5(1
  3
-----
  2

しかし、除数が配当よりも小さい場合はどうなりますか

配当= 3除数= 5

3%5 = 3 ?? どうやって

これは、5は3を直接除算できないため、剰余は被除数になるためです。


3

これらの簡単な手順がお役に立てば幸いです。

20 % 3 = 2 
  1. 20 / 3 = 6; 含めないでください.6667–無視してください
  2. 3 * 6 = 18
  3. 20 - 18 = 2、これは剰余の剰余です

この回答をもう少しよくフォーマットしていただけませんか?
Code Maverick

Code Jammerの回答を確認してください。
Ajmal Salim

2

小数点以下の数値(0.xxx)が短い場合に簡単です。次に、その数に除算後の数を掛けるだけです。

例: 32 % 12 = 8

あなたはない32/12=2.666666667 そして、あなたはスロー2離れて、に焦点0.666666667 0.666666667*12=8< -それはあなたの答えです。

(繰り返しますが、小数点以下の数字が短い場合にのみ簡単です)


1

係数除算は、商ではなく、除算の残りの部分を提供します。


1

17 mod 6があるとしましょう。

合計6で17に最も近い値になります。12を超えると18になり、17 mod 6の質問よりも多くなります。12を取り、17からマイナスして、与えます。あなたの答え、この場合は5。

17 mod 6 = 5


1

係数の除算はかなり単純です。商ではなく剰余を使用します。

    1.0833... <-- Quotient
   __
12|13
   12
    1 <-- Remainder
    1.00 <-- Remainder can be used to find decimal values
     .96
     .040
     .036
     .0040 <-- remainder of 4 starts repeating here, so the quotient is 1.083333...

13/12 = 1R1、エルゴ13%12 = 1。


モジュラスを「サイクル」と考えると役立ちます。

つまり、式n % 12の結果は常に <12になります。

それはセットのための配列を意味する0..100ためn % 12です。

{0,1,2,3,4,5,6,7,8,9,10,11,0,1,2,3,4,5,6,7,8,9,10,11,0,[...],4}

その観点から、係数とその使用法は、はるかに明確になります。


1

理解する唯一の重要なことは、モジュラス(ここではCのように%で示される)はユークリッド除算によって定義されることです。

2つの(d, q)整数の場合、常に次のことが当てはまります

d = ( d / q ) * q + ( d % q )

ご覧のとおり、の値はの値によってd%q 異なります d/q。一般に正の整数のためd/qされ、ゼロに向けて切り捨て、例えば5/2のために、したがって、2を与えます。

5 = (5/2)*2 + (5%2) => 5 = 2*2 + (5%2) => 5%2 = 1

ただし、負の整数の場合、状況はそれほど明確ではなく、言語や標準に依存します。たとえば、-5 / 2は-2(以前のようにゼロに切り捨てられます)を返すことができますが、-3(別の言語で)を返すこともできます。

最初のケースでは:

-5 = (-5/2)*2 + (-5%2) => -5 = -2*2 + (-5%2) => -5%2 = -1

しかし2番目のものでは:

-5 = (-5/2)*2 + (-5%2) => -5 = -3*2 + (-5%2) => -5%2 = +1

前に述べたように、ユークリッド除算である不変量を思い出してください。

詳細:


1
ページネーションに関して驚くほど便利です。
ボブジョーダン

1

27%16 = 11

次のように解釈できます。

16は27を1回通過してから通過します。

16 * 2 = 32。

つまり、16は27に1回、残りは11となると言えます。

実際には、

16 + 11 = 27

他の例:

20%3 = 2

まあ3つはそれを渡す前に20に6回行く。

3 * 6 = 18

合計を20にするには2が必要なので、係数式の残りは2です。


0

単純です。Modulus演算子(%)は、整数除算後の剰余を返します。あなたの質問の例を見てみましょう。27%16 = 11 単に27を16で除算すると(27/16)、余りは11になります。そのため、答えは11になります。


0

0から始まるテーブルを書き出します。

{0,1,2,3,4}

テーブルを行に続けます。

{0,1,2,3,4}
{5,6,7,8,9}
{10,11,12,13,14}

列1のすべてが5の倍数です。列2のすべてが5の倍数で、余りは1です。ここで抽象的な部分:(1)を1/5または10進展開として書くことができます。モジュラス演算子は列のみを返すか、別の考え方では、長除算の剰余を返します。あなたはmodulo(5)を扱っています。異なるモジュラス、異なるテーブル。ハッシュテーブルについて考えてみましょう。


0

2つの整数を除算すると、次のような方程式が得られます。

A / B = Q残りR

Aは配当です。Bは除数です。Qは商、Rは剰余

時には、AをBで除算したときの余りだけに関心がある場合があります。これらの場合には、モジュロ演算子(modと省略)と呼ばれる演算子があります。

16/5= 3 Remainder 1  i.e  16 Mod 5 is 1.
0/5= 0 Remainder 0 i.e 0 Mod 5 is 0.
-14/5= 3 Remainder 1 i.e. -14 Mod 5 is 1.

詳細については、カーンアカデミーの記事を参照してください。

コンピュータサイエンスでは、ハッシュテーブルはMod演算子を使用して要素を格納します。Aはハッシュ後の値、Bはテーブルサイズ、Rは要素が挿入されるスロットまたはキーの数です。

詳細については、ハッシュテーブルのしくみを参照してください。


-1

これは、モジュラス演算子を理解するための私にとって最良のアプローチでした。例を通して説明します。

16 % 3

この2つの数値を除算すると、余りが結果になります。これが私のやり方です。

16 % 3 = 3 + 3 = 6; 6 + 3 = 9; 9 + 3 = 12; 12 + 3 = 15

16に残っているのは1です

16 % 3 = 1

これがもう1つの例16 % 7 = 7 + 7 = 14です。16に残っているものは何ですか。です2 16 % 7 = 2

もう1つ: 24 % 6 = 6 + 6 = 12; 12 + 6 = 18; 18 + 6 = 24。残りはゼロです24 % 6 = 0

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.