я эти 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
Кроме того, почему бы не просто '1 << n' вместо' 2 ** n'? –