es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Python XOR de todos los bits de un entero

Me gustaría saber si la representación binaria de un número entero tiene un número impar de bits iguales a uno.

Existe una solución trivial manipulando bytes y usando algunos desplazamientos, pero creo que es más costoso que usar una operación XOR en cada bit.

¿Hay alguna forma de manipular bits directamente en lugar de bytes?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Sí, hay una forma de manipular bits directamente en lugar de bytes en Python. Puedes utilizar operadores bit a bit como XOR (^), AND (&) y OR (|) para comparar y manipular bits individuales de un entero.

    Para determinar si la representación binaria de un entero tiene un número impar de bits iguales a uno, puedes utilizar XOR para alternar una variable de bandera por cada uno encontrado. Por ejemplo:

    def odd_ones(num):
        # Inicializar una variable de bandera en 0
        flag = 0
    
        # Recorrer cada bit del entero
        while num:
            # Utilizar bitwise AND para verificar si el bit menos significativo es un uno
            if num & 1:
                # Si lo es, alternar la variable de bandera con XOR
                flag ^= 1
            # Desplazar el número hacia la derecha para verificar el siguiente bit
            num >>= 1
    
        # Si la bandera es 1, hubo un número impar de unos en la representación binaria
        return flag == 1
    

    Esta función toma un entero como entrada y recorre cada bit utilizando operaciones bitwise AND y right shift. Por cada uno encontrado, la variable de bandera se alterna con XOR. Si la bandera termina siendo 1, hay un número impar de unos en la representación binaria y la función devuelve True. De lo contrario, devuelve False.

Comments are closed.