Skip to main content
 首页 » 编程设计

python之如何让位旋转功能接受任何位大小

2025年05月04日9jillzhang

我有这两个函数是从其他代码中得到的

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).