如果 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'
我一定不明白 % 的工作方式。
如果 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'
我一定不明白 % 的工作方式。
关键事实- 字母“A”的 ASCII 码是 65。
这是您的密码的工作方式 - 问题标题中的原始表达。
k
位移动它。%
。这始终使您的数字保持在 0-25 范围内,因为除以 26 的余数永远不会大于 25。这允许密钥是任何数字,并且仍然将“加密”输出保持在 AZ 的 ASCII 范围内。
您将%
运算符解释为除法。实际上,它是取模或忘记商 - 我想要余数运算符。
例子
0%2
是 01%2
是 12%2
是 03%2
是 1等等。模是循环的。
模数不是整数除法。模数为您提供除法的余数,因此 3 / 26 为 0,余数为 3。因此,3 % 26 为 3。
3 % 26 是 3,而不是 0。余数是模数。想想时钟上的模数 12。如果是 10 点,你加 4 小时,10 + 4 = 14。但是在时钟上,指针现在指向 2,而不是 14。无论你添加多少小时,指针总是指向一个数字从 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 点钟。)