モジュラス除算がどのように機能するのか本当に理解していません。 27 % 16
を計算していて、11
に巻き込まれましたが、その理由がわかりません。
オンラインで素人の言葉で説明を見つけることができないようです。誰かがここで何が起こっているかについて非常に高いレベルで詳しく説明できますか?
ほとんどの説明では1つの重要なステップが欠落しています。別の例を使用してギャップを埋めましょう。
次の場合:
Dividend: 16
Divisor: 6
modulus functionは次のようになります。
16 % 6 = 4
これがなぜなのかを判断しましょう。
まず、整数除算を実行します。これは、小数(別名、剰余)が破棄されることを除いて、通常の除算と同様です。
16 / 6 = 2
それから、multiply上記の除算の結果(2
)とdivisor(6
):
2 * 6 = 12
最後に、dividend(12
)からの上記の乗算(16
)の結果をsubtract:
16 - 12 = 4
この減算の結果、4
、remainderは、上記のmodulusと同じ結果です!
クロックを使用した例は、モジュロの理解に役立つかもしれません。
モジュラー算術の一般的な使用法は、12時間制での使用です。この場合、1日は2つの12時間に分割されます。
今回は、現在、次のようになっているとします:15:00
ただし、3 pmと言うこともできます
これはまさにモジュロが行うことです:
15 / 12 = 1, remainder 3
この例は、ウィキペディアでより適切に説明されています。 ウィキペディアモジュロ記事
モジュラスを計算するための簡単な式は次のとおりです。
[Dividend-{(Dividend/Divisor)*Divisor}]
したがって、27%16:-
27- {(27/16)* 16}
27- {1 * 16}
答え= 11
注:
すべての計算は整数を使用しています。小数の商の場合、小数の後の部分は無視/切り捨てられます。
例:27/16 = 1.6875は、上記の式の1つだけと見なされます。 0.6875は無視されます。
コンピューター言語のコンパイラーは、小数部分の整数も同じように(小数の後に切り捨てることによって)扱います
モジュラス演算子は除算ステートメントを取り、13/5 = 2のように、その計算で残されたデータ、いわゆる「残りの」データを返します。つまり、その計算で3が残っているか、残っています。どうして? 2 * 5 = 10であるため、13-10 = 3です。
モジュラス演算子は、13%5 = 3の計算をすべて行います。
モジュラスの除算はこれだけです:2つの数値を除算し、剰余のみを返します
27/16 = 1で11が残っているため、27%16 = 11
同じく43/16 = 2で11が残り、43%16 = 11も残っている
非常に簡単:a % b
は、a
をb
で割った余りとして定義されます。
その他の例については、 wikipediaの記事 をご覧ください。
これらの簡単な手順が役立つことを願っています:
20 % 3 = 2
20 / 3 = 6
; .6667
を含めないでください-無視してください3 * 6 = 18
20 - 18 = 2
、剰余の剰余もう1つ追加します。
被除数が除数よりも大きい/大きい場合、モジュロを計算するのは簡単です
配当= 5除数= 3
5%3 = 2
3)5(1
3
-----
2
しかし、除数が配当よりも小さい場合
配当= 3除数= 5
3%5 = 3 ??どうやって
これは、5は3を直接除算できないため、剰余が剰余であるためです。
小数点以下の数字(0.xxx)が短いと簡単になります。あとは、その数に除算後の数を掛けるだけです。
例:32 % 12 = 8
32/12=2.666666667
を実行します。その後、2
を捨てて、0.666666667
に焦点を合わせます0.666666667*12=8
<-それがあなたの答えです。
(繰り返しますが、小数点以下の数字が短い場合のみ簡単です)
17 mod 6があるとします。
合計6で17に最も近くなります。12を超えると、17 mod 6の質問よりも18多いため、12になります。あなたの答え、この場合は5。
17 mod 6 = 5
モジュラス除算は、商ではなく除算の残りを提供します。
モジュラスの除算は非常に簡単です。商の代わりに残りを使用します。
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
の場合、結果はalways <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}
その観点から、モジュラスとその用途はより明確になります。
理解する唯一の重要なことは、modulus(ここではCのように%で表されます)はEuclidean除算。
任意の2つの(d, q)
整数の場合、次はalways trueです。
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(以前のようにゼロに切り捨てられます)を返すことができますが、 別の言語で)を返すこともできます。
最初の場合:
-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
前に述べたように、不変式を思い出してください。これはユークリッド除算です。
詳細:
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)を扱っています。異なるモジュラス、異なるテーブル。ハッシュテーブルを考えてください。
簡単です。モジュラス演算子(%)は整数除算後に剰余を返します。あなたの質問の例を見てみましょう。どのように27%16 = 11?単純に27を16で割ると(つまり、27/16)、残りは11になります。そのため、答えは11です。
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は要素が挿入されるスロットまたはキーの数です。
詳細については、 ハッシュテーブルの仕組み を参照してください