Bits inversos de un número entero positivo en Python

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,

  1. Convierta un número entero en su representación binaria usando la función bin (num) .
  2. 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.
  3. 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.
  4. 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)
Producción

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))
Producción

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *