• ベストアンサー

モジュロ2除算ってどうやるの?

情報処理の勉強をしてるのですが、CRCを算出する時の過程でモジュロ2除算というのを使うと書いてあります。 その中でこのように書かれているのですが、この計算の意味がわかりません。 X11+X10+X7 ÷ X6+X2+1 = X5+X4+1 余り…X5+X4+X2+1 モジュロ2除算って、どうやって計算するんですか? 教えて下さい。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

まずは予備知識から。 ---------- 例えば整数を3で割ると 「割り切れる」か「1余る」か「2余る」か、のいずれかです。 すなわち、余りは「0.1.2」以外にはありません。 それでは「-7」を3で割るとどうなるでしょうか? (-7) ÷ 3 = (-2) 余り (-1)? これは間違いとは言いにくいですが、 余りは「0,1,2」しか許されないとすれば (-7) ÷ 3 = (-3) 余り 2 とするのが良いですね。 これは、数直線上に等間隔に整数をとって、 その下に余りを「0,1,2,0,1,2,……」と書いていき、 負の整数に対しても同様に延長すれば納得できます。 ---------- ご質問の除算を、全く普通に行なえば (x^11 + x^10 + x^7) ÷(x^6 + x^2 + 1) = (x^5 + x^4 - 1) 余り (- x^5 - x^4 + x^2 + 1) となります。これなら分かりますね。 ここで係数だけを取り出すと、 (1 1 0 0 1 0 0 0 0 0 0 0) ÷ (1 0 0 0 1 0 0) = (1 1 0 0 0 -1) 余り (-1 -1 0 1 0 1) となります。被除数(割られる数)と余りだけを対応させると、 (1 1 0 0 1 0 0 0 0 0 0 0) → (-1 -1 0 1 0 1) すなわち、「110010000000」というデータがあったとき、 これらを係数に持つ多項式(x^11 + x^10 + x^7)を作り、 あらかじめ用意しておいた別の多項式(x^6 + x^2 + 1)で割った余りを計算し、 その係数を再びビット列に直して記録しておくわけです。 このとき、コンピュータは0か1しか格納できませんから、 これら以外の係数が現れたら偶数は0に、奇数は1に変換します。 これは言い換えれば、2で割った余り(modulo 2)を考えていることに相当します。 すなわち、上の例で得られた係数はさらに (-1 -1 0 1 0 1) ≡ (1 1 0 1 0 1)と変換され、 ビット列「110101」が格納されます。 これを多項式に書き戻すと、 ご質問のような一見奇妙なmodulo除算ができあがります。 CRCでは、この余分な(= 冗長な)ビット列をチェックすることによって、 データ転送の誤りを検出するわけです。

その他の回答 (3)

  • nubou
  • ベストアンサー率22% (116/506)
回答No.4

私の回答は商ではなく余りの求め方でしたが 符号理論にとっては商はほとんど意味なくて あまりの方が重要なのです 従って商は捨てるようにして余りを求めるのが普通です

  • nubou
  • ベストアンサー率22% (116/506)
回答No.2

mod(2)の世界では0と1しかなく2は0とみなします 引き算も足し算も同じです x^11+x^10+x^7をx^6+x^2+1で割る場合には まず 最高次数x^11に着目してx^6+x^2+1にx^5を掛けて最高次数を同じにしてx^11+x^10+x^7から引き(=に足し)ます そうするとx^11+x^10+x^7の次数が下がります このような操作をx^11+x^10+x^7の操作結果の次数が6未満になるまで繰り返します その操作の最終結果が (x^11+x^10+x^7)÷(x^6+x^2+1)です

  • ymmasayan
  • ベストアンサー率30% (2593/8599)
回答No.1

2進数で割り算をやりますが、桁ごとの引き算に関して1つだけ特別な約束があります。 0-1=1とします。(この約束を使う除算がモジュロ2除算です) モジュロと言うのは余りと言う意味のようです。余りだからマイナスは許さないので 2を足してプラスにすると言うことのようです。 後は、上記の式を(2^11+2^10+2^7)÷(2^6+2^2+2^0) と考えて割り算していきます。 上記の(0-1=1)は例えば「0-2^5=2^5(0-1)=2^5」というような形であらわれます。 頑張って下さい。判りにくければ補足してください。