Dado un entero positivo y el tamaño de los bits, invierta todos los bits y devuelva el número con los bits invertidos. Ejemplos:
Input : n = 1, bitSize=32 Output : 2147483648 On a machine with size of bit as 32. Reverse of 0....001 is 100....0. Input : n = 2147483648, bitSize=32 Output : 1
Podemos resolver este problema rápidamente en Python. El enfoque es muy simple,
- Convierta un número entero en su representación binaria usando la función bin (num) .
- La función bin() agrega 0b como prefijo en la representación binaria del número, omite los primeros dos caracteres de la representación binaria e invierte la parte restante de la string.
- Como sabemos en la memoria, cualquier representación binaria de un número se llena con ceros iniciales después del último bit establecido desde la izquierda, lo que significa que debemos agregar bitSize – len (reversedBits) número de ceros después de invertir la string restante.
- Ahora convierta la representación binaria en un número entero usando el método int (string, base) .
¿Cómo funciona el método int()?
El método int(string,base) toma una string y una base para identificar que la string se refiere a qué sistema numérico (binario=2, hexadecimal=16, octal=8, etc.) y convierte la string en un sistema numérico decimal en consecuencia. Por ejemplo ; int(‘1010’,2) = 10.
Python3
# Function to reverse bits of positive # integer number def reverseBits(num,bitSize): # Convert number into binary representation # output will be like bin(10) = '0b10101' binary = bin(num) # Skip first two characters of binary # representation string and reverse # remaining string and then append zeros # after it. binary[-1:1:-1] --> start # from last character and reverse it until # second last character from left reverse = binary[-1:1:-1] reverse = reverse + (bitSize - len(reverse))*'0' # converts reversed binary string into integer print (int(reverse,2)) # Driver program if __name__ == '__main__': num = 1 bitSize = 32 reverseBits(num, bitSize)
2147483648
Otra forma de revertir bits sin convertir a string:
Esto se basa en el concepto de que si el número (por ejemplo, N) se invierte para X bit, el número invertido tendrá el mismo valor que:
el número máximo posible de X bits – N
= 2 X – 1 – N
Sigue los pasos para implementar esta idea:
- Encuentra el número más alto que se puede formar con el número dado.
- Resta el número dado de eso.
- Devuelve los números.
A continuación se muestra la implementación del enfoque dado.
Python3
# Python code to implement the approach # Function to find the reverse of the number def reverse_bits(number, bit_size): # for example, if bitSize is 32 # then after 1 << bitSize we will get # a 1 in 33-th bit position # bin(1 << bitSize) looks like # '0b100000000000000000000000000000000' # so to get all 1 in each 32 bit positions, # we need to subtract 1 from (1 << bitSize) max_value = (1 << bit_size) - 1 # it is the maximum value for unsigned int32 # then just subtract your number from the maximum return max_value - number if __name__ == "__main__": # for example we can get the number 56 num = 156 # chose a binary size which we want to reverse size = 32 print(reverse_bits(num, size))
4294967139
Publicación traducida automáticamente
Artículo escrito por Shashank Mishra y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA