我有这两个函数是从其他代码中得到的
def ROR(x, n):
mask = (2L**n) - 1
mask_bits = x & mask
return (x >> n) | (mask_bits << (32 - n))
def ROL(x, n):
return ROR(x, 32 - n)
我想在需要 16 位旋转的程序中使用它们。然而,还有其他函数需要 32 位旋转,所以我想在等式中保留 32,所以我得到:
def ROR(x, n, bits = 32):
mask = (2L**n) - 1
mask_bits = x & mask
return (x >> n) | (mask_bits << (bits - n))
def ROL(x, n, bits = 32):
return ROR(x, bits - n)
但是,当我测试这个集合时,答案出现了错误。然而,当代码是
def ROR(x, n):
mask = (2L**n) - 1
mask_bits = x & mask
return (x >> n) | (mask_bits << (16 - n))
def ROL(x, n,bits):
return ROR(x, 16 - n)
这是怎么回事,我该如何解决?
请您参考如下方法:
好吧,看看调用 ROL(x, n, 16) 时会发生什么。它调用了 ROR(x,16-n),相当于 ROR(x,16-n,32),但你真正想要的是 ROR (x, 16-n, 16).
