1

c が大文字の数値 (つまり、B が 66) で、議論のために、k が 2 のキー値である場合は? 私はプログラミングが初めてで、これでモジュロがどのように機能するかを理解していません。剰余の値を取ることは知っていますが、このように単純化しませんか?

c = B = 66
k = 2
I imagine the result should be 'D'

(66 - 65 +2)%26 +65 
(3)%26 +65 
0 + 65 
65 = 'A'

% の仕組みが理解できません。

4

3 に答える 3

3

重要な事実- 文字「A」の ASCII コードは 65 です。

これがあなたのサイファーの仕組みです-質問のタイトルの元の表現です。

  1. 文字の ASCII 値を取得し、そこから "A" の値を引くと、0 ベースの数値が得られます。
  2. この数値にキー値を追加して、桁をずらしkます。
  3. 上で得た数を 26 で割り、商を捨てて余りを使用します。これがモジュロ演算子%です。26 で割った余りが 25 を超えることはないため、これにより常に 0 ~ 25 の範囲の数値が維持されます。
  4. これに 65 を追加して、「暗号化された」大文字に変換します。

これにより、キーを任意の数値にすることができ、「暗号化された」出力は AZ の ASCII 範囲内に保持されます。

%演算子を除算として解釈しています。実際には、これは剰余演算子または商を忘れる剰余演算子です。

  1. 0%2は 0 です
  2. 1%2は 1
  3. 2%2は 0 です
  4. 3%2は 1

等々。モジュロは循環的です。

于 2015-10-03T00:47:14.953 に答える
1

モジュラスは int 除算ではありません。モジュラスは割り算の余りを表すので、3 / 26 は 0 で余りは 3 です。したがって、3 % 26 は 3 です。

于 2015-10-03T00:39:31.507 に答える
0

3 % 26 は 0 ではなく 3 です。モジュラスは剰余です。時計のモジュラス 12 を考えてみてください。10 時の位置に 4 時間を足すと、10 + 4 = 14 になります。しかし、時計の針は 14 ではなく 2 を指します。何時間を足しても、針は常に数字を指します。 1 から 12 まで。これがモジュラスの仕組みです。

10 + 4 = 14

14 % 12 = 2 (14 を 12 で割ると 1 余り 2)

10 + 100 = 110

110 % 12 = 4 (110 を 12 で割った余り 4)

10 時で 100 時間待つと、針は 4 を指します。

(割り算の余りを使うと、12で割ると必ず0から11までの数字になるので、12時を0時と考えてください。)

于 2015-12-14T19:16:44.127 に答える