因此,我正在阅读有关SO的问题,但我不理解其答案的代码。它正在执行一些明智的操作,但我不知道它的工作方式以及while循环中的实际情况以及b2 = (b2*b2) % m
b2 = b
res = 1
while e:
if e & 1:
res = (res * b2) % m
b2 = (b2*b2) % m
e >>= 1
有人可以帮助我理解它吗?
答案 0 :(得分:1)
这是按位与运算。在按位二进制运算中,二进制形式的两个数字由它们相应的位处理。所以1只是一位。它将与数字的最后一位进行比较。因此,如果1的最后一位为1,则a&1将返回1,否则返回零。因此,if块将相应执行
例如
12和1
1 1 0 0
0 0 0 1
_________
0 0 0 0