我有這2個功能,我從一些其他的代碼如何讓位旋轉功能接受任何位的大小?
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)
發生了什麼,我該如何解決這個問題?
什麼是在那裏做「L」?它不應該只是「2 ** n」而不是「2L ** n」? – KIAaze 2013-05-06 16:08:07
另外,爲什麼不簡單地使用'1 << n'而不是'2 ** n'? – 2013-12-06 09:55:25